Intentar compilar incluso el programa más simple ( int main(){}
) con -m32
un sistema de 64 bits falla:
$ 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 que todavía está buscando erróneamente en los directorios incorrectos cuando -m32
se especifica.
libgcc-4.8-dev:i386
está instalado y he verificado que las bibliotecas de 32 bits se encuentran en /usr/lib/gcc/i686-linux-gnu/4.8/
.
He intentado configurar y exportar LD_INCLUDE_PATH
y fue LD_LIBRARY_PATH
en vano.
Respuestas:
Primero, necesita instalar "gcc-multilib" y "g ++ - multilib"
Entonces su comando actual funcionará,
fuente
g++-multilib
también será necesario.libc6-dev-i386
.Para compilar correctamente el código C en ejecutables x86 de 32 bits en un entorno x86_64, debe instalar los siguientes paquetes adicionales:
Después de una llamada de compilación como
tiene éxito
fuente
Este problema también ocurre cuando la
gcc
versión no coincide con la versión degcc-multilib
. En este caso, debe instalar la versión correcta de los paquetes multilib. Por ejemplo; Estaba usando la versión gcc,4.6
así que tuve que instalargcc-4.6-multilib
yg++-4.6-multilib
porque elgcc-multilib
paquete predeterminado era para4.8
.fuente