2012-04-09 10 views
0

Mein System ist Centos 5.8 64-Bit, und ich möchte eine Datei Verknüpfung mit 32-Bit-Bibliothek zu kompilieren. Ich füge -m32 während des Kompilierens hinzu, aber das Ergebnis zeigt "i386: x86-64 Architektur der Eingabedatei` gc_basic_call_model_voice_video_3g_cnf_nbup.o 'ist inkompatibel mit i386 Ausgabe ". Es scheint, dass die Datei nicht auf 32-Bit kompiliert werden kann. Aber wenn ich -m32 nicht hinzufüge, kann die Bibliothek nicht kompiliert werden. Wie kompiliere ich die Datei erfolgreich, danke!Wie kompiliert 64-Bit-Dateiverknüpfung mit 32-Bit-Bibliothek

+0

welche Maschine? Linux? – weima

+0

haben Sie die Flags '-fPIC' und' -rdynamic' verwendet – weima

+0

Ich benutze den Befehl "gcc -m32 A.c B.c -Ldir -o output1.o output2.o". Aber die Ergebnisse zeigen i386: x86-64 Architektur der Eingabedatei 'output1.o' ist inkompatibel mit i386-Ausgabe. Die Datei in dir ist eine 32-Bit-Bibliothek. Ich weiß nicht, wie man das macht :( – Jasoniem9246

Antwort

6

Sie können 32-Bit- und 64-Bit-Code nicht im selben Programm mischen. Der Compiler teilt Ihnen mit, dass eine Ihrer .o-Dateien als 64-Bit-Objekt kompiliert wurde und daher nicht in eine ausführbare 32-Bit-Datei eingebunden werden kann. Sie müssen diese Objektdatei und wahrscheinlich auch andere aus dem Quellcode unter Verwendung von -m32 für alles neu kompilieren.

+1

Oder vielleicht bringen Sie eine 64-Bit-Bibliothek (anstelle eines 64-Bit-Objekts) In jedem Fall: Sie können * 32- und 64-Bit-Code nicht mischen * Sie müssen alle Ihre .c-Quelle neu kompilieren und Ihre -L-Bibliothekspfadflags setzen, um sicherzustellen, dass Sie * nur * 32-Bit-Dateien abholen – paulsm4

+0

@ paulsm4, das ist eine Möglichkeit im Allgemeinen, aber in diesem Fall der Fehler Nachricht sagt speziell, dass es eine Objektdatei ist. – Wyzard

0

dass Sie eine 32-Bit-Version des Programms erstellt (wir es foo.c nennen) auf die folgende Weise:

gcc -m32 -c foo.c -o foo.o 

Sie sollten dann auf den Linker rufen Sie die -melf_i386 Flag verwendet.

ld <whatever commands/flags you gave earlier> -melf_i386 

Beispiel:

ld -o foo.bin --oformat binary basic.o -melf_i386 
Verwandte Themen