*
@Leon0402 sagte in Portabilität von C++ Programmen:
Das wollte ich etwas genauer wissen Also die libstdc++ ist nicht vorinstalliert. Verstehe ich das richtig, dass die libstdc++ die Standard Implementierung vom gcc ist.
Jein, es ist die Library, die mit dem gcc für C++ ausgeliefert wird. Allerdings nutzen diese Library auch andere C++ Compiler. Aufpassen muss man bei der Version, da kann es deutliche Unterschiede geben. Funktionieren dürfte der Wechsel von einer ältere Version auf eine neuere Minorrevision, aber aus Erfahrung (Linux ist mittlerweile stabiler geworden) würde ich noch nicht einmal das als garantiert betrachten. Vorher unbedingt ausprobieren.
Szenerario: Ich nutze clang Version XYZ, Nutzer hat GCC Version XYZ -> Geht im allgemeinen nicht, da Clang eine eigene Implementierung hat?
Keine Ahnung was clang macht, ich nutze bisher clang nicht, – ja prinzipiell möglich.
Szeneriao: Ich nutze gcc neue version, Nutzer hat GCC alte version -> Geht ggf. nicht, da nicht kompatibel?
Ja, wenn zwei unterschiedliche Majorreleases sind, funktioniert es garantiert nicht.
Wieso sind die verschiedenen Implementierungen im allgemeinen nicht kompatibel? Die Implementieren doch die Standard Lib, die ist doch für beide gleich?
Die ABI ist für C++ nicht normiert, d.h. jeder Hersteller darf sein eigenes Ding machen, nur die API ist durch die Norm vorgegeben. Daher kann es da nicht unerhebliche Unterschiede geben. Unter Linux wird mittlerweile verstärkt libstdc++ genutzt, aber nicht von allen Compilern.
Edit: Kann man eig. so Sachen wie die libstdc++ statisch bauen? Ich wüsste jetzt erstmal nicht wo ich das konfigurieren könnte.
Die libstdc++ musst Du nicht statisch bauen, die ist beim Compiler schon dabei. Du musst die Linkerflags fürs statische Linken entsprechend abändern. @DocShoe hat es freundlicher Weise schon erklärt. Für die anderen Libraries musst Du ggf. Pakete nachinstallieren, aber diese Libraries brauchst Du nicht von Hand zu bauen.