Ich schreibe gerade eine Bibliothek und überlege, von GCC 4.1.2 auf 4.5.2 (neueste Version) von GCC zu wechseln. Wenn ich meinen Code in eine statische Bibliothek kompiliere, kann ich davon ausgehen, dass Compiler-Kompatibilität (auf dem gleichen OS offensichtlich) kein Problem für Clients sein sollte?
BEARBEITEN Um weiter zu verdeutlichen: Wenn ich einem Client eine statisch verknüpfte Bibliothek zur Verfügung stelle, die mit gcc 4.5.2 kompiliert wurde, welche Einschränkungen gibt es für Benutzer dieser Bibliothek hinsichtlich des Compilers und der Version, die sie verwenden müssen?
Ich bin gerade auf das gestoßen, von dem ich glaube, dass es meine Frage von Ссылка beantwortet:
ABI ändert die C ++ - Anwendungsbinärdatei Interface (ABI) besteht aus zwei Komponenten: Die erste definiert, wie die Elemente von Klassen werden wie gelegt Funktionen werden aufgerufen, wie funktionieren Namen werden verstümmelt usw .; der Zweite Teil beschäftigt sich mit den Interna des Objekte in libstdc ++. Obwohl wir streben nach einem unveränderlichen ABI, so weit Wir mussten es mit jedem ändern Hauptversion. Wenn Sie Ihre ändern Compiler zu einer anderen Hauptversion Sie müssen alle Bibliotheken neu kompilieren enthält C ++ - Code. Wenn Sie dies nicht tun Sie riskieren Linker Fehler oder fehlerhafte Programme. Einige unserer Java-Support-Bibliotheken enthalten auch C ++ - Code, so könnte es sein kompilieren Sie alle Bibliotheken neu, um sicher zu sein. Es sollte nicht neu kompiliert werden wenn Sie zu einem Bug-Fix gewechselt haben Veröffentlichung der gleichen Version des Compiler; Fehlerkorrekturen sind vorsichtig um ABI-Änderungen zu vermeiden. Siehe auch die Kompatibilitätsabschnitt des GCC manuell.
Bemerkung: Eine Hauptfreigabe wird bestimmt durch einen Wechsel zum ersten oder zweiten Bestandteil des Zwei- oder Dreiteiligen Versionsnummer. A-Moll (Bugfix) Freigabe wird durch eine Änderung auf bezeichnet nur die dritte Komponente. So GCC 3.2 und 3.3 sind Major Releases, während 3.3.1 und 3.3.2 sind Bug-Fix-Versionen für GCC 3.3. Mit der 3.4 Serie haben wir führen ein neues Namensschema ein; Die erste Veröffentlichung dieser Serie ist 3.4.0 statt nur 3.4.
Nachdem ich es verstanden habe, muss ich sicherstellen, dass die Clients meine Bibliothek mit einer kompatiblen Version von gcc verbinden.
Es spielt keine Rolle, ob Sie eine statische Bibliothek oder eine dynamische Bibliothek bereitstellen, die Benutzer müssen dennoch einen kompatiblen Compiler / Linker verwenden, um eine Verbindung herzustellen. Wenn GCC eine ABI-Änderung durchführt, bieten sie normalerweise einen Schalter an, der so eingestellt werden kann, dass er die alte ABI verwendet. Ich weiß, dass sie das getan haben, als sie von 3.x auf 4.x und sogar ein paar Releases innerhalb der 4.x-Serie gingen.
Tags und Links c++ gcc compiler-construction binary-compatibility