Forum: PC-Programmierung C++ Librarysammlung?


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von cppuser (Gast)


Bewertung
0 lesenswert
nicht 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)


Bewertung
-2 lesenswert
nicht 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)


Bewertung
1 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
-1 lesenswert
nicht 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)


Bewertung
1 lesenswert
nicht 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)


Bewertung
1 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
-2 lesenswert
nicht lesenswert
Dr. Sommer schrieb:
> z.B. __cdecl und __stdcall .

Eher nicht, oder?

von Dr. Sommer (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Dumdi D. schrieb:
> Eher nicht, oder?

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

von Dumdi D. (dumdidum)


Bewertung
-1 lesenswert
nicht 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)


Bewertung
1 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
1 lesenswert
nicht 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)


Bewertung
2 lesenswert
nicht 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)


Bewertung
-3 lesenswert
nicht 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)


Bewertung
-1 lesenswert
nicht 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)


Bewertung
-1 lesenswert
nicht lesenswert
Sheeva P. schrieb:
> Erzähl.doch.keinen.Scheiß.

?? Belege doch bitte.die.Gegenmeinung.

von Rolf M. (rmagnus)


Bewertung
0 lesenswert
nicht 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)


Bewertung
3 lesenswert
nicht 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)


Bewertung
2 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
1 lesenswert
nicht 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)


Bewertung
-1 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
-1 lesenswert
nicht 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)


Bewertung
1 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.