2012-01-14 8 views
24

He construido GCC 4.7 en mi sistema x86 de 32 bits de Linux. Cuando intento compilar en forma cruzada con la bandera -m64 consigoGCC: lo siento, no implementado: modo de 64 bits no compilado en

Lo sentimos, no se han aplicado: el modo de 64 bits no está compilado en

mientras que el compilador proporcionada por defecto por mi distribución de Linux puede cruzada compila con -m64.

¿Qué debo pasar a ./configure para habilitar el modo de 64 bits en GCC? Estas son las opciones que he utilizado para construir GCC 4.7:

$ /usr/local/bin/g++ -v Using built-in specs. 
COLLECT_GCC=/usr/local/bin/g++ 
COLLECT_LTO_WRAPPER=/usr/local/libexec/gcc/i686-pc-linux-gnu/4.7.0/lto-wrapper 
Target: i686-pc-linux-gnu 
Configured with: ./configure --enable-multiarch --with-cloog=/usr/local/ --with-mpfr=/usr/local/ --with-ppl=/usr/local/ --verbose --enable-languages=c,c++ 
Thread model: posix gcc version 4.7.0 20120113 (experimental) (GCC) 

EDIT:

--enable multilib y --enable-objetivos = i686-pc-linux-gnu, x86_64-pc- linux-gnu

no cambia la situación. El compilador todavía se queja sobre el modo de 65 bits no compilado en:

$ g ++ -v Usando las características incorporadas. COLLECT_GCC = g ++ COLLECT_LTO_WRAPPER =/usr/local/libexec/gcc/i686-pc-linux-gnu/4.7.0/lto-wrapper Target: i686-pc-linux-gnu Configurado con: ./configure --enable -multiarch --with-cloog =/usr/local/--with-mpfr =/usr/local/--with-ppl =/usr/local/--verbose --enable-languages ​​= c, C++ --enable -multilib --enable-targets = i686-pc-linux-gnu, x86_64-pc-linux-gnu Modelo de subproceso: posix gcc versión 4.7.0 20120113 (experimental) (GCC)

$ g ++ -m64 c.cpp c.cpp: 1: 0: Lo sentimos, no se han aplicado: el modo de 64 bits no compilado en

+0

'--enable-multiarch' sugiere Debian (o derivado), y como recuerdo, FSF's GCC realmente no funciona tan bien con los sistemas multiarch de Debian. Es posible que deba aplicar los parches de Debian a las instantáneas de FSF GCC. – hvd

+0

Por supuesto que no funcionará así. Multilib tiene * compatibilidad hacia atrás *, y no * hacia adelante *. Para compilar código de 64 bits en una máquina de 32 bits, debe compilar SDK mínimo: binutils + libc [musl, uclibc, glibc, ...] + gcc. – 0andriy

Respuesta

9

tendrá que ambos paquetes binutils configurados con:

--enable-multilib 

y probablemente:

--enable-targets=i686-pc-linux-gnu,x86_64-pc-linux-gnu 

para apoyar multilib (el -m64 y/o -m32 opciones). También necesitarás dos versiones de cosas como glibc para poder vincular y ejecutar los binarios resultantes.

+0

No funciona con --enable-multilib y --enable-targets = i686-pc-linux-gnu, x86_64-pc-linux-gnu: $ g ++ -v Usando las especificaciones incorporadas. COLLECT_GCC = g ++ COLLECT_LTO_WRAPPER =/usr/local/libexec/gcc/i686-pc-linux-gnu/4.7.0/lto-wrapper Target: i686-pc-linux-gnu Configurado con: ./configure - enable-multiarch --with-cloog =/usr/local/--with-mpfr =/usr/local/--with-ppl =/usr/local/--verbose --enable-languages ​​= c, C++ - enable-multilib --enable-targets = i686-pc-linux-gnu, x86_64-pc-linux-gnu Modelo de subproceso: posix gcc versión 4.7.0 20120113 (experimental) (GCC) – Martin

+2

¿Tiene binutils configurados con el mismas opciones? – rubenvb

+0

Está mal, no se puede obtener la compatibilidad * forward *. – 0andriy

19

Esto normalmente significa que está utilizando el compilador incorrecto (antiguo).

Los nuevos compiladores son compatibles con -m32 y -m64. Debe establecer la RUTA en los compiladores nuevos (en el subdirectorio gcc, MinGW de Rtools) antes de los compiladores anteriores en Rtools.

Intente actualizar la ruta de acceso binario de su compilador a la versión de 64 bits. Otros recursos como las carpetas de lib también deberían cambiar en consecuencia.

+1

No entiendo por qué alguien dio a esta respuesta un voto negativo. Esta fue la respuesta correcta real en mi caso. – Anoyz

+0

¿Cuál es "la ruta de acceso binario de tu compilador"? –

1

Solo resolvió este problema. En las variables de entorno, elimine las entradas de cualquier paquete obsoleto de C++.

En mi caso, trabajé en Anaconda en Windows de 64 bits. En anaconda, realicé 'conda install mingw libpython'. Mingw es para el compilador de C++. Pero antes había instalado cygwin's mingw para compilaciones de C++ que no se habían actualizado. Esta es la razón del conflicto. Resolví este problema simplemente eliminando la variable de entorno (PATH) correspondiente a estos paquetes de C++.
He intentado en casi todos los foros, esta solución funciona.

Háganme saber en caso de que alguien necesite ayuda. :)

Cuestiones relacionadas