2009-11-18 2 views
11

Secondo Apple's gcc 4.2.1 doc:gcc di Apple, qual è la differenza tra -arch i386 e -m32?

-arch arco
compilazione per la destinazione architettura arco specificato. I valori consentiti sono "i386", "x86_64", "ppc" e "ppc64". Le opzioni multiple funzionano e indirizza il compilatore per produrre binari "universali" incluso il codice oggetto per ogni architettura specificata con -arch. Questa opzione funziona solo se l'assemblatore e le librerie sono disponibili per ogni architettura specificata. (APPLE SOLO)

Allora, qual è la differenza tra queste due chiamate:

gcc -arch i386 program.c

e

gcc -m32 program.c

è solo che -arch è più potente in quanto è più flessibile e può produrre binari universali quando si specificano più archi?

risposta

9

Non sono sicuro, ma dalla lettura della pagina man ottengo conclusioni simili.

Immagino che l'unica vera differenza sia che -arch può essere utilizzato per creare binari universali.

Dato che questo lavora per creare i binari universali

gcc -arch i386 -arch x86_64 foo.c 

ma in realtà non può essere sicuro di quello che la semantica del seguente dovrebbe essere (probabilmente lo sono anche sintassi non valida). Soprattutto il terzo dovrebbe essere invalido come dice la pagina man per generare per ambienti a 32 o 64 bit.

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