Gcc от Apple, в чем разница между -arch i386 и -m32? - PullRequest
11 голосов
/ 18 ноября 2009

Согласно Apple, gcc 4.2.1, документ :

- арочная арка
Компилировать для указанной цели архитектура арка. Допустимое значения: «i386», «x86_64», «ppc» и 'Ppc64. Несколько вариантов работы, и направить компилятор для производства «Универсальные» двоичные файлы, включая объект код для каждой указанной архитектуры с -арх. Эта опция работает только если ассемблер и библиотеки доступны для каждой указанной архитектуры. (ТОЛЬКО ЯБЛОКО)

Так в чем же разница между этими двумя вызовами:

gcc -arch i386 program.c

и

gcc -m32 program.c

Просто -arch более мощный, более гибкий и может создавать универсальные двоичные файлы при указании нескольких арок?

1 Ответ

9 голосов
/ 18 ноября 2009

Я не уверен, но прочитав справочную страницу, я пришел к тем же выводам, что и вы.

Полагаю, единственная реальная разница в том, что -arch может использоваться для создания универсальных двоичных файлов.

Как это работает для создания универсальных двоичных файлов

gcc -arch i386 -arch x86_64 foo.c

но на самом деле вы не можете быть уверены, какой должна быть семантика следующего (возможно, это даже недопустимый синтаксис). Особенно третий должен быть недействительным, как говорится в справочных страницах для 32- или 64-разрядных сред.

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
...