2009-11-18 95 views
11

根據Apple's gcc 4.2.1 docApple的gcc,-arch i386和-m32有什麼區別?

-arch拱
編譯爲指定的目標 架構拱。允許的 值爲'i386','x86_64','ppc'和 'ppc64'。多選項工作,並且 指示編譯器產生 「通用」二進制文件,包括用-arch命令指定的每個體系結構 的對象 代碼。此選項僅適用於針對指定的每種體系結構的 彙編程序和庫可用 。 (蘋果只)

那麼什麼是這兩個電話之間的區別:

gcc -arch i386 program.c

gcc -m32 program.c

難道只是-arch更強大,因爲它更靈活並且在指定多個拱形時可以生成通用二進制文件?

回答

9

我不確定,但從閱讀手冊頁我得到類似的結論,因爲你做。

我想唯一真正的區別是-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