C ++ Bibliothekskompatibilität

8

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?

    
Graeme 16.01.2011, 14:06
quelle

2 Antworten

7

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.

    
Graeme 16.01.2011, 14:29
quelle
1

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.

    
diverscuba23 16.01.2011 16:21
quelle