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
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.
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.
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.
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.
> 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?
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?
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
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 .
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é
Dumdi D. schrieb: > Eher nicht, oder? Ändert die Calling-Convention einer Funktion. Beeinflusst also das ABI.
Dr. Sommer schrieb: > Ändert die Calling-Convention einer Funktion. Beeinflusst also das ABI. Ja, aber nichr die abwaertskompatibikitaet der versionen, oder
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.
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.
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 :)
Hallo, wie wäre es mit QT, somit kannst du bei Windows bleiben und die Programme kannst Du auch für andere Betriebssysteme benutzen.
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ß.
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.
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.
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 .
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...
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
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++.
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.
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
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++.
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.
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...
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.