Der Versuch, selbst das einfachste ( int main(){}
) Programm -m32
auf einem 64-Bit-System zu kompilieren , schlägt fehl:
$ gcc -m32 test.c
/usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-linux-gnu/4.8/libgcc.a when searching for -lgcc
/usr/bin/ld: cannot find -lgcc
/usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-linux-gnu/4.8/libgcc_s.so when searching for -lgcc_s
/usr/bin/ld: cannot find -lgcc_s
collect2: error: ld returned 1 exit status
Es scheint immer noch fälschlicherweise in den falschen Verzeichnissen zu suchen, wenn -m32
angegeben wird.
libgcc-4.8-dev:i386
ist installiert und ich habe überprüft, dass sich die 32-Bit-Bibliotheken in befinden /usr/lib/gcc/i686-linux-gnu/4.8/
.
Ich habe versucht, einzustellen und zu exportieren LD_INCLUDE_PATH
und LD_LIBRARY_PATH
ohne Erfolg.
Antworten:
Zuerst müssen Sie "gcc-multilib" und "g ++ - multilib" installieren
Dann wird Ihr aktueller Befehl funktionieren,
quelle
g++-multilib
wird ebenfalls benötigt.libc6-dev-i386
.Um C-Code in einer x86_64-Umgebung erfolgreich in x86 32-Bit-ausführbare Dateien zu kompilieren, müssen Sie die folgenden zusätzlichen Pakete installieren:
Nach einem Kompilierungsaufruf wie
gelingt es.
quelle
Dieses Problem tritt auch auf, wenn die
gcc
Version nicht mit der Version von übereinstimmtgcc-multilib
. In diesem Fall sollten Sie die richtige Version der Multilib-Pakete installieren. Beispielsweise; Ich habe die gcc-Version verwendet,4.6
also musste ich installierengcc-4.6-multilib
undg++-4.6-multilib
weil das Standardpaketgcc-multilib
für war4.8
.quelle