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

Jea*_*ser 11 macos gcc 32-bit

根据Apple的gcc 4.2.1 doc:

-arch arch
为指定的目标体系结构arch编译.允许值为'i386','x86_64','ppc'和'ppc64'.多个选项有效,并指示编译器生成"通用"二进制文件,包括使用-arch指定的每个体系结构的对象代码.仅当汇编程序和库可用于指定的每个体系结构时,此选项才有效.(仅限苹果)

那么这两个调用之间的区别是什么:

gcc -arch i386 program.c

gcc -m32 program.c

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

jit*_*ter 9

我不确定,但是通过阅读手册页,我得到了与你相似的结论.

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

因为这可以创建通用二进制文件

gcc -arch i386 -arch x86_64 foo.c
Run Code Online (Sandbox Code Playgroud)

但你实际上不能确定下面的语义应该是什么(它们甚至可能是无效的语法).特别是第三个应该是无效的,因为手册页说要为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
Run Code Online (Sandbox Code Playgroud)
-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
Run Code Online (Sandbox Code Playgroud)