2009-11-18 6 views
11

Selon Apple's gcc 4.2.1 doc:Gcc d'Apple, quelle est la différence entre -arch i386 et -m32?

arc -arch
Compile pour la cible spécifiée arc architecture. Les valeurs autorisées sont 'i386', 'x86_64', 'ppc' et 'ppc64'. Plusieurs options fonctionnent, et diriger le compilateur pour produire binaires "universels" y compris l'objet code pour chaque architecture spécifiée avec -arch. Cette option ne fonctionne que si l'assembleur et les bibliothèques sont disponibles pour chaque architecture spécifiée. (APPLE SEULEMENT)

Alors, quelle est la différence entre ces deux appels:

gcc -arch i386 program.c

et

gcc -m32 program.c

Est-il juste que -arch est plus puissant car il est plus flexible et peut produire des binaires universels lors de la spécification de plusieurs arcs?

Répondre

9

Je ne suis pas sûr mais à la lecture de la page de manuel j'arrive à des conclusions similaires à celles que vous faites.

Je suppose que la seule vraie différence est que -arch peut être utilisé pour créer des binaires universels.

Comme cela fonctionne pour créer des binaires universels

gcc -arch i386 -arch x86_64 foo.c 

mais vous en fait ne peut pas être sûr de ce que la sémantique des éléments suivants devraient être (ils sont probablement même syntaxe non valide). En particulier, le troisième devrait être invalide comme le disent les pages de manuel pour les environnements 32 ou 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 
Questions connexes