Apple的gcc,-arch i386和-m32之间的区别是什么?

时间:2009-11-18 08:30:19

标签: macos gcc 32-bit

根据Apple's gcc 4.2.1 doc

  

-arch arch
  编译指定的目标   建筑拱门。允许的   值为'i386','x86_64','ppc'和   'PPC64'。多个选项有效,并且   指导编译器生成   “通用”二进制文件,包括对象   指定每个体系结构的代码   与-arch。此选项仅适用于   汇编程序和库可用   对于指定的每个架构。   (仅限苹果)

那么这两个电话之间的区别是什么:

gcc -arch i386 program.c

gcc -m32 program.c

是否 -arch 更强大,因为它更灵活,并且在指定多个拱时可以生成通用二进制文件?

1 个答案:

答案 0 :(得分: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