2009-11-18 6 views
11

Según Apple's gcc 4.2.1 doc:gcc de Apple, ¿cuál es la diferencia entre -arch i386 y -m32?

arco -arch
Compilar para el objetivo arco especificado. Los valores permitidos son 'i386', 'x86_64', 'ppc' y 'ppc64'. Varias opciones funcionan, y dirigen el compilador para producir binarios "universales" que incluyen el código de objeto para cada arquitectura especificada con -arch. Esta opción solo funciona si el ensamblador y las bibliotecas están disponibles para cada arquitectura especificada. (Apple sólo)

Entonces, ¿cuál es la diferencia entre estas dos llamadas:

gcc -arch i386 program.c

y

gcc -m32 program.c

¿Es justo que -arch es más potente, ya que es más flexible y puede producir binarios universales al especificar múltiples arcos?

Respuesta

9

No estoy seguro, pero al leer la página del manual, llego a conclusiones similares a las tuyas.

Supongo que la única diferencia real es que -arch se puede utilizar para crear binarios universales.

este tipo de obras para crear binarios universales

gcc -arch i386 -arch x86_64 foo.c 

pero en realidad no se puede estar seguro de lo que debería ser la semántica de la siguiente (que probablemente son aún sintaxis no válida). Especialmente, el tercero debe ser no válido, como dice la página man para generar para entornos de 32 o 64 bits.

gcc -m32 -arch i386 -arch x86_64 foo.c 
gcc -m64 -arch i386 -arch x86_64 foo.c 
gcc -m32 -m64 -arch i386 -arch x86_64 foo.c 
-m32 
-m64 
    Generate code for a 32-bit or 64-bit environment. The 32-bit environment 
    sets int, long and pointer to 32 bits and generates code that runs on any 
    i386 system. The 64-bit environment sets int to 32 bits and long and 
    pointer to 64 bits and generates code for AMDs x86-64 architecture. 
    For darwin only the -m64 option turns off the -fno-pic and 
    -mdynamic-no-pic options. 

-arch //already included in question 
Cuestiones relacionadas