Wie vermeidet man STT_GNU_IFUNC Symbole in Ihrer Binärdatei?

8

Ich muss auf einer Red Hat 4.1.2-Box (die gcc 4.1.2 hat) bereitstellen. Ich benutze GCC 4.6.1 auf Ubuntu 11.10 für die Entwicklung. Leider sind einige der Binärdateien, die mein Build-Prozess erstellt, nicht auf dem RedHat-Computer verwendbar. Der Grund scheint eine ABI-Änderung zu sein, die nach Eine weitere Stackoverflow-Frage resultierte aus der Einführung von STT_GNU_IFUNC-Symbolen. Gibt es eine Möglichkeit zu verhindern, solche Symbole zu exportieren, so dass meine Binärdatei die alte ABI verwenden kann? Ich benutzte nm, um nach irgendwelchen Symbolen des Typs "i" auf meiner Binärdatei zu suchen, fand aber keine.

Ich frage das, weil einige meiner anderen Binaries sowie einige von mir gebaute Third-Party-Bibliotheken (TBB, Boost) nicht den neuen ABI verwenden und daher auf dem RedHat-Rechner gut laufen.

Hoffe, das ist klar. Vielen Dank im Voraus.

    
samwise 12.01.2012, 20:58
quelle

2 Antworten

11

Im Allgemeinen unterstützen UNIX-Systeme die Rückwärts-Binärkompatibilität (eine auf einer alten Maschine erstellte Binärdatei läuft weiterhin auf einer neueren), aber nicht umgekehrt. Sie können nicht erwarten, dass eine auf einem neuen System erstellte Binärdatei auf einer älteren ausgeführt wird. STT_GNU_IFUNC ist nur das erste vieler Probleme, denen Sie begegnen werden.

Wenn Sie eine Binärdatei auf einer neueren Maschine erstellen müssen, die auf einer älteren läuft, lesen Sie diese Dokument.

Früher gab es "apgcc: Ein GCC-Wrapper, um portable Binaries zu machen", der das leicht machte (es wird von oben referenziert), aber es scheint weg zu sein; - (

Die einfachste Möglichkeit besteht darin, auf einer alten Maschine zu bauen (ich habe auf RedHat 6.2 gebaut, und die resultierende Binärdatei lief überall ). Sie müssen RH-6.2 nicht auf einer physischen Maschine ausführen, sondern nur in einer VM.

Die andere relativ einfache Option besteht darin, in chroot einzubauen, wobei wiederum Werkzeuge und Bibliotheken aus einer alten Distribution (z. B. RH-6.2) verwendet werden.

    
Employed Russian 13.01.2012, 05:31
quelle
0

Cross-Compiling zu einem älteren Linux kann sehr schwierig sein, und dies ist nur eines von vielen Problemen, denen Sie begegnen werden.

Das heißt, das ABI-Kompatibilitätsproblem kann durch Hinzufügen von -Wl,-fno-jump-tables gelöst werden.

    
Adam Azarchs 29.04.2017 00:32
quelle

Tags und Links