gcc non si collegherà con -m32


23

Tentare di compilare anche il int main(){}programma più semplice ( ) -m32su un sistema a 64 bit non riesce:

$ 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

Sembra che stia ancora cercando erroneamente nelle directory sbagliate quando -m32viene specificato.

libgcc-4.8-dev:i386è installato e ho verificato che le librerie a 32 bit si trovano in /usr/lib/gcc/i686-linux-gnu/4.8/.

Ho provato a impostare ed esportare LD_INCLUDE_PATHe LD_LIBRARY_PATHsenza risultati.


Risposte:


23

Innanzitutto, è necessario installare "gcc-multilib" e "g ++ - multilib"

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

Quindi il tuo comando corrente funzionerà,

$ 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

2
Nota: per i programmi C ++, g++-multilibsarà richiesto anche.
Vladimir Panteleev,

1
Si consideri inoltre: libc6-dev-i386.
Kenorb,

0

Per compilare correttamente il codice C in file eseguibili a 32 bit x86 in un ambiente x86_64 è necessario installare i seguenti pacchetti extra:

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

Dopo una chiamata di compilazione come

$ gcc -m32 test.c -o test

riesce.


0

Questo problema si verifica anche quando la gccversione non corrisponde alla versione di gcc-multilib. In questo caso è necessario installare la versione corretta dei pacchetti multilib. Per esempio; Stavo usando la versione di gcc, 4.6quindi ho dovuto installare gcc-4.6-multilibe g++-4.6-multilibperché il gcc-multilibpacchetto predefinito era per 4.8.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.