2010-08-17 23 views
54

Tengo un programa propietario que estoy tratando de usar en un sistema de 64 bits.Force gcc para compilar programas de 32 bits en la plataforma de 64 bits

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

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

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

+0

Intenta publicar en stackoverflow. Probablemente obtendrá una buena respuesta allí –

+0

El problema es con la instalación del programa, no escribiendo @Nathan –

+0

posible duplicado de [Cómo compilar un binario de 32 bits en una máquina de Linux de 64 bits con gcc/cmake] (http : //stackoverflow.com/questions/1272357/how-to-compile-a-32-bit-binary-on-a-64-bit-linux-machine-with-gcc-cmake) –

Respuesta

67

Debe hacer que GCC use la bandera -m32.

Se podría tratar de escribir un script de shell simple a su $PATH y lo llaman gcc (asegúrese de no sobrescribir el gcc original, y asegúrese de que el nuevo script viene antes en $PATH, y que utiliza la ruta completa . GCC

Creo que el código que necesita es sólo algo así como /bin/gcc -m32 $* dependiendo de su concha (la $* está ahí para incluir todos los argumentos, aunque podría ser otra cosa - muy importante)

+14

También necesitará el Biblioteca C de 32 bits, así como versiones de 32 bits de cualquier biblioteca externa con la que el programa enlace en algunos casos. –

+5

De hecho. Bibliotecas estándar: C: 'apt-get install gcc-multilib'; C++: 'apt-get install g ++ - multilib'. – Bart

41

usted puede obtener una 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, sólo tiene que instalar gcc multilib

sudo apt-get install gcc-multilib 
+0

Para proyectos C++, 'sudo apt-get install gcc-multilib g ++ - multilib'. – phoenix

8

Para cualquier código que se compila directamente utilizando gcc/g++, necesitará añadir -m32 opción a la línea de comandos de compilación, simplemente edite sus variables CFLAGS, CXXFLAGS y LDFLAGS en su Makefile.

Para cualquier código de terceros que esté utilizando, debe asegurarse de que al compilarlo lo 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 variables CFLAGS, CXXFLAGS y LDFLAGS al script de configuración. También podría ser necesario añadir --build y --host al guión configure por lo que terminan con algo como

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

Si la compilación falla esto probablemente significa que es necesario instalar algunos paquetes de desarrollo de 32 bits en su máquina de 64 bits

Cuestiones relacionadas