2009-11-18 91 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