C++ Librarysammlung?

Gast #5369667
Lesenswert?

Hallo,

eigentlich komme ich eher aus der c# Ecke, möchte mich jetzt aber 
intensiver mit c++ auseinandersetzen.

Ein kleines Buch "c++ für Dummies" habe ich mir schon durchgelesen und 
bin mittlerweile soweit, dass ich die grundlegenden Dinge hinbekomme...

Um mich vom "Hello-World" Status wegzubewegen wollte ich jetzt mal einen 
TCP Client bauen oder auch z.B. mit libcurl eine Seite ansurfen und mir 
dort einfach alle Bilder herunterladen.

Libcurl habe ich bis jetzt nicht zum Laufen bekommen, da mir ständig 
irgendwelche Abhängigkeiten fehlen und man auf der libcurl Page einfach 
nicht einen Download findet wo man die Headerdateien, die Libdatei und 
die dll Datei erhält... das ist ja eine Katastrophe oder ich bin einfach 
zu unfähig.

Die Lib für Winsock war bei mir in Codeblocks im Standard dabei, auch 
wenn ich das erstmal herausfinden musste...

Gibt es sowas wie eine großes libverzeichnis für c++, was diese Probleme 
irgendwie löst?

In c# kann ich aus dem Stehgreif die beiden von mir oben genannten 
Projekte quasi in Sekundenschnelle schreiben, in c++ theoretisch auch, 
aber ich suche unendlich lange nach irgendwelchen Abhängigkeiten und 
libs, so arbeitet doch keiner?

Viele Grüße
#5369678
Lesenswert?

cppuser schrieb:
> bcurl Page einfach nicht einen Download findet wo man die Headerdateien,
> die Libdatei und die dll Datei erhält...

Das grundsaetzliche Problem mit c++ ist, dass das ABI nichst 
stabil/spezifiziert ist. D.h. nur libs die mit demselben Compiler und 
derselben version.erstellt wurden koenneb gelinkt werden
Deswegen.wird sooft ein C Interface.verwendet.
Gast #5369679
Lesenswert?

cppuser schrieb:
> Gibt es sowas wie eine großes libverzeichnis für c++, was diese Probleme
> irgendwie löst?

Unter Linux liefert der Paket Manager nahezu alle Open Source Libraries 
frei Haus. Unter Windows hilft NuGet. Schau dir auch mal Boost an, damit 
kann man schon viel machen.
#5369680
Lesenswert?

cppuser schrieb:
> Gibt es sowas wie eine großes libverzeichnis für c++, was diese Probleme
> irgendwie löst?

http://www.boost.org/

> In c# kann ich aus dem Stehgreif die beiden von mir oben genannten
> Projekte quasi in Sekundenschnelle schreiben, in c++ theoretisch auch,
> aber ich suche unendlich lange nach irgendwelchen Abhängigkeiten und
> libs, so arbeitet doch keiner?

Curl wird meistens unter Linux/UNIX genutzt. Dort gibt es für so etwas 
einen Paketmanager, der sich um die Abhängigkeiten kümmert.
Gast #5369685
Lesenswert?

Dumdi D. schrieb:
> Das grundsaetzliche Problem mit c++ ist, dass das ABI nichst
> stabil/spezifiziert ist.

Und wozu existiert dann z.B. das Itanium ABI?

Dumdi D. schrieb:
> D.h. nur libs die mit demselben Compiler und derselben version.erstellt
> wurden koenneb gelinkt werden

Stimmt nur begrenzt, die meisten Compiler sind zu sich selbst 
abwärtskompatibel; tatsächliche Brüche im ABI sind gut dokumentiert. Für 
die Interoperabilität zwischen verschiedenen Compiler lässt sich auch 
oft sorgen z.B. über spezielle Optionen.
Gast #5369690
Lesenswert?

> Curl wird meistens unter Linux/UNIX genutzt. Dort gibt es für so etwas
> einen Paketmanager, der sich um die Abhängigkeiten kümmert.

Was nutzt ihr als Alternative für Windows?


> http://www.boost.org/
>
top, das schau ich mir mal an.


> Das grundsaetzliche Problem mit c++ ist, dass das ABI nichst
> stabil/spezifiziert ist. D.h. nur libs die mit demselben Compiler und
> derselben version.erstellt wurden koenneb gelinkt werden
> Deswegen.wird sooft ein C Interface.verwendet.

Suchst du denn dann jedes Mal nach der richtigen Libversion bei dr 
Google oder gibt es da unter Windows eine IDE, die einem die Arbeit 
abnimmt?
#5369954
Lesenswert?

Dr. Sommer schrieb:
> Und wozu existiert dann z.B. das Itanium ABI?

Naja, das.ist dann halt eines von mehreren abis. Welche compiler 
unterstuetzen diese abi?

Dr. Sommer schrieb:
> Stimmt nur begrenzt, die meisten Compiler sind zu sich selbst
> abwärtskompatibel; tatsächliche Brüche im ABI sind gut dokumentiert. Für
> die Interoperabilität zwischen verschiedenen Compiler lässt sich auch
> oft sorgen z.B. über spezielle Optionen.

Welche optionen.sind das fuer.msvc?
#5370025
Lesenswert?

cppuser schrieb:
>
> Gibt es sowas wie eine großes libverzeichnis für c++, was diese Probleme
> irgendwie löst?

Naja, M$-Windows ist für SW-Entwicklung irgendwie schon falsch ...

> In c# kann ich aus dem Stehgreif die beiden von mir oben genannten
> Projekte quasi in Sekundenschnelle schreiben, in c++ theoretisch auch,
> aber ich suche unendlich lange nach irgendwelchen Abhängigkeiten und
> libs, so arbeitet doch keiner?

Richtig.

Nimm irgendeine Linux-Distribution (Empfehlung für Entwicklung: Arch 
Linux) und lass das den Paket-Manager machen.

Ansonsten schau Dich erst mal hier um:

http://en.cppreference.com/w/cpp/links/libs
Gast #5370041
Lesenswert?

Dumdi D. schrieb:
> Naja, das.ist dann halt eines von mehreren abis.

Ja. Man muss sich eins auswählen.

Dumdi D. schrieb:
> Welche compiler
> unterstuetzen diese abi?
"it is used as the standard C++ ABI for many major operating systems on 
all major architectures, and is implemented in many major C++ compilers, 
including GCC and Clang."

Dumdi D. schrieb:
> Welche optionen.sind das fuer.msvc?

z.B. __cdecl und __stdcall .
Gast #5370080
Lesenswert?

Dumdi D. schrieb:
> Ja, aber nichr die abwaertskompatibikitaet der versionen, oder

Weiß nicht. Bei MSVC ist das eh alles etwas komisch. Ich arbeite damit 
eher selten. Im Open-Source-Bereich gibt's viele C++ Libraries die ohne 
Weiteres direkt genutzt werden können (GTKmm, Boost, ...) - die 
Kompatibilitäts-Situation ist also nicht so schlimm.
#5370446
Lesenswert?

Dr. Sommer schrieb:
> cppuser schrieb:
>> Gibt es sowas wie eine großes libverzeichnis für c++, was diese Probleme
>> irgendwie löst?
>
> Unter Linux liefert der Paket Manager nahezu alle Open Source Libraries
> frei Haus.

und mit pkg-config auch ein gutes Tool, um gleich alle für die 
Installation passenden Compiler- und Linker-Einstellungen zu bekommen.

Dr. Sommer schrieb:
> Dumdi D. schrieb:
>> D.h. nur libs die mit demselben Compiler und derselben version.erstellt
>> wurden koenneb gelinkt werden
>
> Stimmt nur begrenzt, die meisten Compiler sind zu sich selbst
> abwärtskompatibel; tatsächliche Brüche im ABI sind gut dokumentiert.

Es gibt allerdings nicht nur das ABI. Gerade heute habe ich eine C++-Lib 
nach einem Upgrade des Compilers nicht mehr weiter nutzen können, weil 
sich in der Standardlib was geändert hat, wodurch std::string nicht mehr 
binärkompatibel war. Da bringt's einem dann leider nichts, dass das ABI 
sich nicht geändert hat.
Gast #5370520
Lesenswert?

Rolf M. schrieb:
> weil
> sich in der Standardlib was geändert hat, wodurch std::string nicht mehr
> binärkompatibel war.
Vermutlich SSO oder so. Solche Optimierungen machen C++ zwar sehr 
effizient, bewirken aber das Problem mit der Binärkompatibilität. Das 
ist eine grundlegende Designentscheidung; wenn man ein Problem damit 
hat, kann man z.B. zu Java wechseln, das hat genau diese Probleme nicht. 
Würde jemand verlangen, C++ solle das Problem lösen, würde Java 
herauskommen :)
#5370851
Lesenswert?

Rolf M. schrieb:
> Zuerst stellst du eine unbelegte Behauptung auf, und wenn jemand dir
> widerspricht, erwartest du einen Beleg.
Ich hatte eigebtlich gedacht, das meine Aussage zum Allgemeinwissen von 
jedem gehoert, der professionell C++ unter Windows entwickelt. Hier eine 
Referenz:

https://docs.microsoft.com/en-us/cpp/porting/binary-compat-2015-2017

Immerhin hat man das Problem nicht von 2015 auf 2017 .
#5370972
Lesenswert?

Dumdi D. schrieb:
> Rolf M. schrieb:
>> Zuerst stellst du eine unbelegte Behauptung auf, und wenn jemand dir
>> widerspricht, erwartest du einen Beleg.
> Ich hatte eigebtlich gedacht, das meine Aussage zum Allgemeinwissen von
> jedem gehoert, der professionell C++ unter Windows entwickelt.

Tue ich nicht. Ich entwickle (sowohl geschäftlich, als auch privat) 
unter Linux. Deshalb weiß ich nicht, wie gut oder schlecht Windows das 
hinbekommt.
Es ist auch klar, dass das in C alles wesentlich einfacher ist (wobei 
ich dort auch schon Inkompatibilitäten durch unterschiedliche 
libc-Versionen hatte). Aber dass es zwischen verschiedenen 
Compiler-Version nie kompatibel ist, stimmt eben auch nicht. Dass es 
nicht passt, ist zumindest unter Linux eher die Ausnahme als die Regel.

Dumdi D. schrieb:
> Dr. Sommer schrieb:
>> Wenn Open Source Compiler das besser hinbekommen...
>
> Ist es so viel.besser?
>
> https://gcc.gnu.org/onlinedocs/libstdc++/manual/using_dual_abi.html

Da hätt ich vielleicht mal reinschauen sollen. Das klingt genau nach dem 
Problem, dass ich hatte, und es gibt eine Lösung. Jetzt ist mir auch 
klar, warum ein -std=c++98 nicht geholfen hat.
Aber was ich mich frage: Ist das wirklich ein Unterschied im ABI und 
nicht eher einer in der API, wenn ein std::string nicht ein 
std::basic_string<...> ist, sondern ein std::__cxx11::basic_string<...>?
#5372101
Lesenswert?

Dumdi D. schrieb:
> Ich hatte eigebtlich gedacht, das meine Aussage zum Allgemeinwissen von
> jedem gehoert, der professionell C++ unter Windows entwickelt.

Da habe ich einmal mehr Glück gehabt, daß ich weder unter noch für 
Windows entwickeln muß.

> Hier eine Referenz:
>
> https://docs.microsoft.com/en-us/cpp/porting/binary-compat-2015-2017
>
> Immerhin hat man das Problem nicht von 2015 auf 2017 .

Das ist ein Problem der betroffenen Compiler, keines von C++.
Gast #5372235
Lesenswert?

Weil man bei Java keine Inkompatibilitäten schaffen wollte, ist das 
Generics System so beschränkt. Die C++ Templates sind um Größenordnungen 
mächtiger, bewirken aber derartige Probleme. Man kann sich dann das 
passende Übel aussuchen...
Gast #5372243
Lesenswert?

Mit Boost solltest du schon recht weit kommen, Boost ist aus Erfahrung 
sehr gut und auch schnell, wenn du GUI willst irgendwas Richtung Qt.

Wenn du etwas rechnen willst entweder die entsprechenden Datentypen aus 
Boost verwenden oder wenn es noch genauer sein soll dann die gmplib.

OpenMP und OpenCL darf man natürlich nicht vergessen zu erwähnen.

Und ich würde standardmäßig gegen libstdcc++ im parallel Mode linken. 
Das sind ein paar Flags und man kann damit eigentlich kaum etwas falsch 
machen, gewinnt teils aber enorm an Performance.

http://ls11-www.cs.tu-dortmund.de/people/gutweng/AD08/VO11_parallel_mode_overview.pdf

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren