C++ Redistributable unter Linux?



  • Hallo,

    Bei Windows muss man ja stets die passende "c++ redistributable" (die c++ runtime) mitliefern, wenn man nicht gerade statisch linkt.
    Allerdings habe ich von so einem Konzept oder solchen Begriffen unter Linux oder Mac noch nie etwas gehoert.
    Laeuft das hier genau so ab? Wie heisst die "c++ runtime" dort?



  • libstdc++.so, sollte nicht gesondert installiert werden muessen.



  • Man muss unter Linux/Unixartigen also keine spezielle Version seiner libraries/runtimes mitliefern? Das find' ich ja erstmal super!

    Die Frage ist nur: Warum macht MS das dann so, das ist doch relativ umstaendlich und kompliziert geloest.



  • Das ist eigentlich ganz einfach:

    Jede neue Visual C++ Version bringt neue C++-Features.
    Jetzt ist aber die C++-ABI sehr instabil (solltest du mal danach googlen),
    das heißt, ein C++ Programm läuft nur, wenn die C++-Runtime Version vorliegt, gegen die auch gelinkt wurde.
    Daher benötigt ein VC++-2005 Programm eben die 2005er Runtime, weil die 2008er usw. möglicher Weise binär nicht mit dem Programm kompatibel ist.
    Hinzu kommt, dass unter Windows die Programme in der Regel Closed Source sind.

    Unter Linux braucht man in der Regel nur eine C++-Runtime, die generell schon vorinstalliert ist, weil alle C++-Programme auf sie angewiesen sind.
    Das liegt daran, dass z.B. unter Ubuntu 12.04 alle Programme genau mit dieser Version der Runtime gelinkt wurden.
    Darum kümmert sich der Distributor, was nur geht, weil die meisten Linux-Programme Open-Source sind.

    In Ausnahmefällen kann es aber auch unter Linux notwendig werden, z.B. eine alte Runtime vom GCC 3.x zusätzlich zu installieren, weil man ein altes Closed Source Programm benutzen will/muss.

    Ich hoffe, ich habe das einiger Maßen verständlich erklären können 🙂



  • @DrakoXp: deine Erklährung sieht für mein Verständniss gut aus.

    Unter linux wird versucht die c++ ABI soweit wie möglich abwärtskompatible zu halten. Seit ich linux verwende wurde nur einmal eine bruch der ABI kompatibilität für die c++ runtime vorgenommen und das war als von gcc 3.x auf gcc 4.x aktualisiert wurde.

    Sprich wenn eine Anwendung z.b. mit gcc 4.4 übersetzt wurde läuft es auch wenn die c++ runtime von gcc 4.6 installiert ist.



  • Das mit der Abwärtskompatibilität kann ich soweit bestätigen, nur umgedreht wird es eben problematisch.
    Die meisten Distributionen basieren AFAIK zur Zeit noch auf dem GCC 4.5.3 und wenn ich als Hobbybastler mit dem 4.7er herumexperimentiere (wegen C++11),
    dann kann ich meine Programme auch nur mit entsprechender Runtime weitergeben.
    Alternativ gibt man den Quellcode weiter, und der Empfänger braucht dann wie gewohnt eben auch einen passenden Compiler.



  • Super Sache, danke DrakoXP!


Anmelden zum Antworten