苹果的gcc,-arch i386和-m32有什么区别?

11
根据苹果公司的gcc 4.2.1文档:(链接)
-arch arch 为指定的目标架构arch编译。允许的值有“i386”、“x86_64”、“ppc”和“ppc64”。多个选项可以工作,并直接引导编译器生成"通用"二进制文件,其中包含使用-arch指定的每个架构的目标代码。只有在为每个指定的架构可用汇编程序和库时,此选项才有效。(仅限APPLE)
那么这两个命令行之间有什么区别呢?
gcc -arch i386 program.c

gcc -m32 program.c
它们的区别仅是-arch更加强大,因为它更灵活,并能够在指定多个架构时生成通用二进制文件吗?
1个回答

9

我不确定,但是从阅读手册中我得出了与你相似的结论。

我猜唯一的真正区别是-arch可以用来创建通用二进制文件。

由于这可以用来创建通用二进制文件,因此它是有效的。

gcc -arch i386 -arch x86_64 foo.c

但是实际上你不能确定以下内容的语义应该是什么(它们可能甚至是无效的语法)。特别是第三个应该是无效的,因为man页面说要生成32位或64位环境的for。

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接