Frage

Soweit ich verstanden habe, ist es nicht möglich, Link-Bibliotheken, die verschiedenen Versionen von GCC Application Binary Interface (ABI) verwenden. Gibt es ABI Änderungen an jede Version von GCC? Ist es möglich, eine Bibliothek mit 4.3.1 gebaut zu verknüpfen, wenn ich, sagen wir, GCC 4.3.2? Gibt es eine Matrix von einer Art, dass listet alle Möglichkeiten, wie ich GCC-Versionen kombinieren kann?

War es hilfreich?

Lösung

Die offizielle ABI Punkte ein abicheck . Dieses Tool kann tun, was Sie wollen.

Andere Tipps

Da gcc-3.4.0 ist das ABI vorwärts kompatibel. I.E. eine Bibliothek mit einer älteren Mitteilung kann durch eine neuere und es sollte (das Gegenteil nicht) arbeiten verknüpft werden. Natürlich könnte es sein Fehler, aber es gibt nur ein in der Dokumentation erwähnt: http://gcc.gnu.org/bugzilla/show_bug.cgi?id=33678

Ugh, igitt.
Wie kann man ein bestimmtes binäres zusammengestellt, die gcc sagen? Hier ist der Todesanzeige von gcc-4.7.2-1-mingw32.README.txt:

Binary Inkompatibilität Hinweis!

Die C- und C ++ ABI in GCC geändert 4.7.0, das heißt in der Regel können Sie nicht Link zusammen Binärdateien mit dieser Version des Compiler kompiliert und mit Versionen vor GCC 4.7.0. Insbesondere gilt Folgendes:

  • Die Option -mms-bitfields standardmäßig aktiviert ist, was bedeutet, das bitfield Layout folgt der Konvention des Microsoft-Compiler.

  • C ++ Klasse-Member-Funktionen folgen nun der __thiscall Aufrufkonvention.

  • Der Compiler geht nun davon aus, dass der Anrufer den Stapel für die knallt implizite Argumente zu einem Gesamtrückgabewert zeigt. Dies wirkt sich Funktionen structs von Wert, wie der komplexe mathematische Art.

  • Rückkehr
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top