linux gcc 32-bit x86-64

linux - Fuerza a gcc para compilar programas de 32 bits en una plataforma de 64 bits



32-bit x86-64 (3)

Para cualquier código que compile directamente usando gcc / g++ , necesitará agregar la opción -m32 a la línea de comandos de compilación, simplemente edite las CFLAGS , CXXFLAGS y LDFLAGS en su Makefile .

Para cualquier código de terceros que pueda estar usando, debe asegurarse de que cuando lo construya configure para la compilación cruzada. Ejecute ./configure --help y vea qué opción está disponible. En la mayoría de los casos, puede proporcionar sus CFLAGS , CXXFLAGS y LDFLAGS al script de configuración. También podría necesitar agregar --build y --host al script de configuración para que termine con algo así como

./configure CFLAGS=-m32 CXXFLAGS=-m32 LDFLAGS=-m32 --build=x86_64-pc-linux-gnu --host=i686-pc-linux-gnu

Si falla la compilación, esto probablemente signifique que debe instalar algunos paquetes de desarrollo de 32 bits en su máquina de 64 bits.

Tengo un programa propietario que estoy tratando de usar en un sistema de 64 bits.

Cuando ejecuto la instalación, funciona bien, pero después de que intenta actualizarse y compilar algunos módulos, no puede cargarlos.

Sospecho que es porque está usando gcc y gcc trata de compilarlos para un sistema de 64 bits y, por lo tanto, este programa no puede usar estos módulos.

¿Hay alguna forma (algunas variables ambientales o algo así) de forzar a gcc a hacer todo por una plataforma de 32 bits? ¿Funcionaría un chroot de 32 bits?


Puede obtener un binario de 32 bits aplicando el método de Alan Pearce, pero también puede obtener los errores de la siguiente manera:

fatal error: bits/predefs.h: No such file or directory

Si este es el caso y si tiene apt-get, simplemente instale gcc-multilib

sudo apt-get install gcc-multilib


Necesita hacer que GCC use el indicador -m32 .

Podría intentar escribir un script simple de shell en su $PATH y llamarlo gcc (asegúrese de no sobrescribir el gcc original, y asegúrese de que el nuevo script venga antes en $PATH , y que use la ruta completa a GCC.

Creo que el código que necesitas es algo así como /bin/gcc -m32 $* dependiendo de tu caparazón (el $* está ahí para incluir todos los argumentos, aunque podría ser otra cosa, ¡muy importante!)