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!)