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
Antwort
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.
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
@ paulsm4, das ist eine Möglichkeit im Allgemeinen, aber in diesem Fall der Fehler Nachricht sagt speziell, dass es eine Objektdatei ist. – Wyzard
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
- 1. g ++ mit python.h, wie kompiliert
- 2. Wie kompiliert werden Warnung
- 3. Wie kompiliert Helloworld mit Android-Quellcode
- 4. Wie werden Erweiterungsmethoden kompiliert?
- 5. kompiliert Code mit OpenCV Bibliotheken
- 6. Linq kompiliert wird mit ExecuteMethodCall
- 7. GWT kompiliert nicht mit Unterpaketen
- 8. Gradle kompiliert nicht mit ndkBuild
- 9. Wie kompiliert Boost-Thread-Bibliothek
- 10. Warum/wie kompiliert sich das?
- 11. Wie kompiliert gerbv für Heroku
- 12. wie kompiliert youtube-api applikation
- 13. Wie wird diese Erweiterungsmethode kompiliert?
- 14. Wie kompiliert Go-Programm in 1.1.2 mit Abhängigkeiten in 1.1.1 kompiliert?
- 15. Finding Boost kompiliert mit CLang mit CMake
- 16. Cross-kompiliert mit einer inkompatiblen Version
- 17. angular2 schluck Aufgabe kompiliert, aber mit Fehlern
- 18. Prüfen, ob OpenCV mit TBB kompiliert wurde
- 19. Mysql ist nicht mit PHP kompiliert?
- 20. FFmpeg nicht kompiliert mit gemeinsam genutzten Bibliotheken
- 21. Abhängigkeiten mit AndroidTestCompile kompiliert werden nicht erkannt
- 22. Ausführen einer portablen App mit autoit - kompiliert
- 23. Script kompiliert mit pyinstaller DLL laden fehlgeschlagen
- 24. Warum kompiliert Code mit aufeinanderfolgenden Semikolons?
- 25. Kann Cython mit ICC kompiliert werden?
- 26. Einheit Finalisierungsreihenfolge für Anwendung, kompiliert mit Laufzeitpaketen?
- 27. Wie kann man feststellen, ob Swift mit Optimization kompiliert wurde?
- 28. Wie man `tap` Tests mit` webpack` kompiliert und ausführt?
- 29. Wie können Sie überprüfen, mit welchen Optionen vim kompiliert wurde?
- 30. Wie kompiliert man nur einige Dateien mit sbt?
welche Maschine? Linux? – weima
haben Sie die Flags '-fPIC' und' -rdynamic' verwendet – weima
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