Forum: PC-Programmierung C++ Librarysammlung?


von cppuser (Gast)


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

von Dumdi D. (dumdidum)


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.

von Dr. Sommer (Gast)


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.

von Sheeva P. (sheevaplug)


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.

von Dr. Sommer (Gast)


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.

von cppuser (Gast)


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?

von Dumdi D. (dumdidum)


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?

von Wilhelm M. (wimalopaan)


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

von Dr. Sommer (Gast)


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 .

von René H. (Gast)


Lesenswert?

Nimm Boost und schau Dir im wesentlichen Boost ASIO an. Ein Code 
Beispiel für einen einfachen Asynchronen/Synchronen TCP Proxy kann ich 
Dir geben.

Grüsse,
René

von Dumdi D. (dumdidum)


Lesenswert?

Dr. Sommer schrieb:
> z.B. __cdecl und __stdcall .

Eher nicht, oder?

von Dr. Sommer (Gast)


Lesenswert?

Dumdi D. schrieb:
> Eher nicht, oder?

Ändert die Calling-Convention einer Funktion. Beeinflusst also das ABI.

von Dumdi D. (dumdidum)


Lesenswert?

Dr. Sommer schrieb:
> Ändert die Calling-Convention einer Funktion. Beeinflusst also das ABI.

Ja, aber nichr die abwaertskompatibikitaet der versionen, oder

von Dr. Sommer (Gast)


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.

von Rolf M. (rmagnus)


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.

von Dr. Sommer (Gast)


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 :)

von Dirk (Gast)


Lesenswert?

Hallo, wie wäre es mit QT, somit kannst du bei Windows bleiben und die 
Programme kannst Du auch für andere Betriebssysteme benutzen.

von Sheeva P. (sheevaplug)


Lesenswert?

Dumdi D. schrieb:
> 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.

Erzähl.doch.keinen.Scheiß.

von Sheeva P. (sheevaplug)


Lesenswert?

cppuser schrieb:
>> 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?

Kubuntu auf dem Desktop, Debian und Ubuntu LTS auf dem Server.

von Dumdi D. (dumdidum)


Lesenswert?

Sheeva P. schrieb:
> Erzähl.doch.keinen.Scheiß.

?? Belege doch bitte.die.Gegenmeinung.

von Rolf M. (rmagnus)


Lesenswert?

Dumdi D. schrieb:
> Sheeva P. schrieb:
>> Erzähl.doch.keinen.Scheiß.
>
> ?? Belege doch bitte.die.Gegenmeinung.

Na du bist lustig. Zuerst stellst du eine unbelegte Behauptung auf, und 
wenn jemand dir widerspricht, erwartest du einen Beleg.

von Dumdi D. (dumdidum)


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 .

von Dr. Sommer (Gast)


Lesenswert?

Dumdi D. schrieb:
> der professionell C++ unter Windows entwickelt

Daran sehen wir wieder wie "professionell" Windows wirklich ist ;-) Wenn 
Open Source Compiler das besser hinbekommen...

von Dumdi D. (dumdidum)


Lesenswert?

Dr. Sommer schrieb:
> Daran sehen wir wieder wie "professionell" Windows wirklich ist ;-)

Das streite ich nicht ab, gut ist was anderes.

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

https://stackoverflow.com/questions/11682748/is-clang-abi-same-as-g

von Dr. Sommer (Gast)


Lesenswert?

Dumdi D. schrieb:
> Ist es so viel.besser?

Da nicht jede einzelne Version inkompatibel ist, ja. Die Änderung an 
std::string ist C++ selbst Schuld, nicht GCC/libstdc++.

von Dumdi D. (dumdidum)


Lesenswert?

Dr. Sommer schrieb:
> Da nicht jede einzelne Version inkompatibel ist, ja. Die Änderung an
> std::string ist C++ selbst Schuld, nicht GCC/libstdc++.

Da stimme ich auch zu.

von Rolf M. (rmagnus)


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<...>?

: Bearbeitet durch User
von Sheeva P. (sheevaplug)


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++.

von Dumdi D. (dumdidum)


Lesenswert?

Sheeva P. schrieb:
> Das ist ein Problem der betroffenen Compiler, keines von C++.

Wenn man vom ABI spricht, kann man das meiner Meinung nach nicht so 
trennen.

von Dr. Sommer (Gast)


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...

von Carlos (Gast)


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

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.