A tentativa de compilar até o programa mais simples ( int main(){}
) com -m32
um sistema de 64 bits falha:
$ 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
Parece ainda estar procurando erroneamente nos diretórios errados quando -m32
é especificado.
libgcc-4.8-dev:i386
está instalado e eu verifiquei que as bibliotecas de 32 bits estão localizadas /usr/lib/gcc/i686-linux-gnu/4.8/
.
Eu tentei configurar e exportar LD_INCLUDE_PATH
e LD_LIBRARY_PATH
sem sucesso.
Respostas:
Primeiro, você precisa instalar "gcc-multilib" e "g ++ - multilib"
Então seu comando atual funcionará,
fonte
g++-multilib
também será necessário.libc6-dev-i386
.Para compilar com êxito o código C em executáveis x86 de 32 bits em um ambiente x86_64, é necessário instalar os seguintes pacotes extras:
Após uma chamada de compilação como
consegue.
fonte
Esse problema também ocorre quando a
gcc
versão não corresponde à versão dogcc-multilib
. Nesse caso, você deve instalar a versão correta dos pacotes multilib. Por exemplo; Eu estava usando a versão gcc,4.6
então tive que instalargcc-4.6-multilib
eg++-4.6-multilib
porque ogcc-multilib
pacote padrão era para4.8
.fonte