2010-07-16 15 views
47

Estoy usando un sistema de 64 bits, pero quiero un conjunto de binarios de 32 bits. ¿Qué opciones debo pasar a un script de configuración para generar un makefile de 32 bits/x86?¿Construye 32 bits en Linux de 64 bits utilizando un script configure de automake?

+0

más uno. Estoy intentando construir Git para Solaris. 'uname -m' devuelve' i86pc'. Todas menos una de las 10 bibliotecas dependientes detectaron erróneamente la plataforma. Solo OpenSSL lo identificó correctamente como x86_64. – jww

Respuesta

59

Pasando el siguiente argumento para configurar la escritura me permitió construir la biblioteca de 32 bits para Linux de 64 bits

./configure --build=i686-pc-linux-gnu "CFLAGS=-m32" "CXXFLAGS=-m32" "LDFLAGS=-m32" 
+0

No funciona para mí :(Por favor, ayúdenme en http://stackoverflow.com/questions/13780319/cant-build-32bit-wine-on-64bit-linux – m93a

+3

No funcionó para mí al intentar construir una biblioteca. Me dio el mensaje 'configure: error: el compilador C++ no puede crear ejecutables' –

+2

Esta respuesta es incompleta, por eso a veces puede obtener el error" el compilador no puede crear ejecutables. "Consulte mi respuesta en este mismo hilo – volpato

3

gcc Suponiendo/g ++:

CPPFLAGS=-m32 ./configure ... 
+1

Gracias por la respuesta. El script de configuración aún establece el tipo de sistema de compilación y el tipo de sistema de host en x86_64-unknown-linux-gnu. ¿Sabes cómo anular estos? –

38

respuesta de Jack es incompleta.

Necesita compatibilidad con el compilador/libc para la compilación de 32 bits. En algunas distribuciones como Ubuntu, lo que hay que hacer es instalar los paquetes gcc-multilib y/o g++-multilib:

sudo apt-get install gcc-multilib g++-multilib 

A continuación, puede llamar a configurar como usted ha dicho, specifyiong una serie de 32 bits y pasando banderas de compilación de 32 bits:

./configure --host=i686-linux-gnu "CFLAGS=-m32" "CXXFLAGS=-m32" "LDFLAGS=-m32" 

Si todavía no ha instalado multilib, recibirá un error como configure: error: C compiler cannot create executables cuando pasa la bandera -m32.

+3

Algunos programas compilan 32 bits en amd64 de forma predeterminada (por ejemplo, wine), posiblemente además de los de 64 bits, y deberían poder encontrar multilib si están instalados. No parece ser el caso de OP. Además, Jack tenía razón sobre una cosa: debe ser '--build', not' --host'. '--host' se debe usar solo si está compilando un compilador. Todavía funciona porque hay muchas personas que no lo hacen RTFM y escribir scripts que usan '--host' en lugar de' --build', y las personas autotools se han roto Ya basta de cosas. –

+0

los paquetes * -multilib ya no existen en Debian estable. – Braiam

6

Tuve un mejor éxito estableciendo un compilador personalizado en su lugar. De esta manera todas las pruebas de configure, incluso los que utilizan CFLAGS personalizados, funcionó correctamente:

./configure CC="gcc -m32" CXX="g++ -m32" 

usted todavía tiene versiones de 32 bits de todas las bibliotecas utilizadas por la aplicación, por supuesto, por lo que cualquier error de alrededor bibliotecas que faltan están refiriendo a los de 32 bits.

1

Una forma alternativa a las cosas descritas anteriormente sería (si tiene) usar un compilador x86 dedicado. La línea de configuración sería entonces como esto (I nombró a los 86-herramientas según el modelo "<nombreHerramienta> -x86"):

CC="/path/to/c/compiler/gcc-x86" CXX="path/to/cpp/compiler/g++-x86" LD="path/to/linker/ld-x86" ./configure 
Cuestiones relacionadas