Ich habe einige Bedenken hinsichtlich der Kompatibilität beim Aufbau einer C ++ - Bibliothek mit einer modernen Version von GCC 4.4.x / 4.5.x, wobei Clients auf einer älteren Version, sagen wir 3.4.x / 4.1.x. Eine vorgeschlagene Lösung besteht darin, die Objektdateien zu kompilieren und zu verteilen. Die Kunden können dann eine Verknüpfung mit einer beliebigen Version von GCC und der entsprechenden ABI herstellen. Einige Fragen:
Prost, Graeme
Am sichersten wäre es, ihnen ein .so und den entsprechenden Header mit der stabilen binären API zu geben. Um binär stabil zu sein, sollte die API keine std::
-Typen wie std::string
oder std::vector<>
akzeptieren oder zurückgeben, da sich das binäre Layout von std::
-Typen von Version zu Version ändern kann.
Und es sollte statisch mit libstdc ++ verknüpft werden (ja, es ist möglich), so dass Ihre Clients nicht mit einer bestimmten Version von libstdc ++ verlinken müssen.
Nachdem dies gesagt wurde, war der letzte ABI-Wechsel von g ++, AFAIK, zwischen 3,3 und 3,4. Ab 3.4 sollten die Objektdateien kompatibel sein.
Sie können auch alle Ihre .o-Dateien zur Vereinfachung in eine .a-Datei packen, sodass Ihre Clients beim Hinzufügen einer neuen .o-Datei ihre Makefiles nicht aktualisieren müssen, um sie mit der neuen .o-Datei zu verknüpfen.
Tags und Links c++ gcc compiler-construction