2012-06-18 41 views
13

Quizás una pregunta muy trivial:¿Cómo compilar un programa C++ como de 64 bits en una máquina de 64 bits?

Necesito compilar un programa como de 64 bits (el archivo MAKE anterior se escribió para compilarlo como de 32 bits).

Vi la opción -m32 apareciendo en los parámetros de línea de comandos con cada compilación de archivos. Por lo tanto, modifiqué el archivo MAKE para deshacerme de -m32 en OPTFLAG, pero de nuevo cuando el programa se compila, todavía veo que se muestra -m32 y los binarios todavía son de 32 bits. ¿Este m32 viene también de otro lado?

+0

¿Qué estás intentando compilar? Quizás pueda reconfigurarlo con indicadores adecuados si usa autotools en lugar de ajustar Makefile. Si no es su propio software, sería mejor que le pregunte a la comunidad correspondiente sobre cómo construir correctamente su software. Solo desde el punto de vista de gcc necesita su versión adecuada y '-m64' http://gcc.gnu.org/onlinedocs/gcc/i386-and-x86_002d64-Options.html#i386-and-x86_002d64-Options. – mlt

+0

make no predefine -m32, ni ningún otro componente del sistema (a menos que exista alguna modificación específica de la distribución, pero por lo general no es así), si eso es lo que está preguntando. – hvd

+0

@mlt -m64 no es necesario; -m64 es el valor predeterminado para un compilador de 64 bits. – hvd

Respuesta

14

-m32 sólo puede estar llegando desde algún lugar en tus archivos make, tendrás que rastrearlo (usar un grep recursivo) y eliminarlo.

When I am able to force -m64, I get "CPU you selected does not support x86-64 instruction set".Any clues?. uname -a gives x86_64

Ese error significa que hay una opción como -march=i686 en los Makefile, que no es válida para la compilación de 64 bits, pruebe a quitar eso también.

Si no puede eliminarlo (¡intente con más fuerza!), Agregue -march=x86-64 después en la línea de comandos especificará un tipo genérico de CPU de 64 bits.

4

Si el software que está tratando de construir está basado en autotools, esto debería hacer el truco:

./configure "CFLAGS=-m64" "CXXFLAGS=-m64" "LDFLAGS=-m64" && make 

O, por sólo un Makefile sencillo:

env CFLAGS=-m64 CXXFLAGS=-m64 LDFLAGS=-m64 make 
+0

Como ya mencioné en un comentario, '-m64' es el valor predeterminado para un gcc configurado de 64 bits. Si necesita especificar '-m64', está haciendo algo mal. Si el paquete cree que necesita agregar '-m32', probablemente esté haciendo más que eso, y no está lidiando con el resto. – hvd

Cuestiones relacionadas