gcc verbindet sich nicht mit -m32

23

Der Versuch, selbst das einfachste ( int main(){}) Programm -m32auf 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 -m32angegeben wird.

libgcc-4.8-dev:i386ist 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_PATHund LD_LIBRARY_PATHohne Erfolg.

Vladimir Panteleev
quelle
Verwandte Themen
Kenorb

Antworten:

23

Zuerst müssen Sie "gcc-multilib" und "g ++ - multilib" installieren

sudo apt-get install gcc-multilib g++-multilib

Dann wird Ihr aktueller Befehl funktionieren,

$ cat hello.c
#include <stdio.h>

int main(int argc, char *argv[]) {
    puts("Hello, World!");
}
$ uname -a
Linux vbox-1404 3.13.0-24-generic #46-Ubuntu SMP Thu Apr 10 19:11:08 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux
$ gcc -m32 hello.c
$ ./a.out
Hello, World!
$ file a.out
a.out: ELF 32-bit LSB  executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.24, BuildID[sha1]=80bdc95e2941e3ba8d7bb7c1682098f20e77cebc, not stripped
Elliott Frisch
quelle
2
Hinweis: Für C ++ - Programme g++-multilibwird ebenfalls benötigt.
Vladimir Panteleev
1
Beachten Sie auch: libc6-dev-i386.
Kenorb
0

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:

sudo apt-get install libc6-dev-i386 gcc-multilib

Nach einem Kompilierungsaufruf wie

$ gcc -m32 test.c -o test

gelingt es.

maxschlepzig
quelle
0

Dieses Problem tritt auch auf, wenn die gccVersion nicht mit der Version von übereinstimmt gcc-multilib. In diesem Fall sollten Sie die richtige Version der Multilib-Pakete installieren. Beispielsweise; Ich habe die gcc-Version verwendet, 4.6also musste ich installieren gcc-4.6-multilibund g++-4.6-multilibweil das Standardpaket gcc-multilibfür war 4.8.

HeyYO
quelle