Wie zu vermeiden, STT_GNU_IFUNC Symbole in Ihre binäre?
Muss ich bereitstellen, um eine Red Hat 4.1.2-box (die gcc-4.1.2). Ich benutze GCC 4.6.1 auf Ubuntu 11.10 für die Entwicklung. Leider sind einige der Binärdateien, die meine build-Prozess erstellt werden, sind nicht verwendbar auf der RedHat-Maschine. Der Grund scheint zu sein, eine ABI-änderung, die nach ein weiterer Stackoverflow-Frage ergab sich aus der Einführung von STT_GNU_IFUNC Symbole. Gibt es eine Möglichkeit zu verhindern, dass der Export solcher Symbole so, dass mein binäre verwenden können die alten ABI? Ich benutzte nm, um sich für die Symbole der "ich" - Typ auf meiner binäre aber keine gefunden.
Ich Frage, weil einige meiner anderen Binärdateien sowie einige 3rd-party-libs Baue ich (tbb, boost) sind nicht mit dem neuen ABI und so laufen problemlos auf RedHat Maschine.
Hoffe, dass ist klar. Vielen Dank im Voraus.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Im Allgemeinen UNIX-Systeme unterstützen rückwärts Binär-Kompatibilität (eine binäre gebaut auf einer alten Maschine arbeitet auf eine neuere), aber nicht Umgekehrt. Sie können nicht erwarten, dass ein binary gebaut auf einem neuen system laufen auf einem älteren.
STT_GNU_IFUNC
ist nur die ersten der vielen Probleme, die Ihnen begegnen werden.Wenn Sie brauchen, um zu bauen eine binäre auf eine neuere Maschine, die läuft auf eine ältere, siehe diese Dokument.
Es verwendet werden, um "apgcc: Ein GCC wrapper um tragbare binaries", dass dies leicht gemacht (es ist referenziert von oben), aber es scheint Weg zu sein ;-(
Die einfachste Möglichkeit ist der Aufbau auf einer alten Maschine (die ich verwendet, um zu bauen auf RedHat 6.2, und die resultierende binäre lief überall). Sie müssen nicht, um tatsächlich laufen RH-6.2 auf einer physischen Maschine, nur bringen Sie es in eine VM.
Den anderen relativ einfache Möglichkeit ist der Aufbau in einem
chroot
wieder mit tools und libraries aus einer alten distribution (z.B. RH-6.2).Cross-compiling auf einem älteren linux kann sehr schwierig sein, und dies ist nur eines von vielen Problemen, die Sie antreffen.
Sagte, die ABI-Kompatibilität problem kann gelöst werden, durch hinzufügen von
-Wl,-fno-jump-tables
.Als APGCC scheint nicht mehr verfügbar. Diese die glibc-Header scheinen derzeit die bequemste Art und Weise zu generieren portable Linux binaries aus einem C-code durch, darunter einer der älteren-header-Dateien.