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

发布于 2024-08-11 08:01:12 字数 571 浏览 8 评论 0原文

根据 Apple 的 gcc 4.2。 1 个文档

-拱形拱形
针对指定目标进行编译 建筑拱门。允许的 值为“i386”、“x86_64”、“ppc”和 'ppc64'。多种选择有效,并且 指示编译器生成 包括对象的“通用”二进制文件 指定每个架构的代码 与-arch。此选项仅在以下情况下有效 汇编器和库可用 对于每个指定的架构。 (仅限苹果)

这两个调用之间有什么区别:

gcc -arch i386 program.c

那么

gcc -m32 program.c

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

According to Apple's gcc 4.2.1 doc:

-arch arch
Compile for the specified target
architecture arch. The allowable
values are 'i386', 'x86_64', 'ppc' and
'ppc64'. Multiple options work, and
direct the compiler to produce
“universal” binaries including object
code for each architecture specified
with -arch. This option only works if
assembler and libraries are available
for each architecture specified.
(APPLE ONLY)

So what's the difference between these two calls:

gcc -arch i386 program.c

and

gcc -m32 program.c

Is it just that -arch is more powerful as it's more flexible and can produce universal binaries when specifiying multiple archs?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

自由如风 2024-08-18 08:01:12

我不确定,但通过阅读手册页,我得到了与您类似的结论。

我想唯一真正的区别是 -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
为 32 位或 64 位环境生成代码。 32位环境
将 int、long 和指针设置为 32 位并生成可在任何计算机上运行的代码
i386系统。 64位环境设置int为32位,long和
指向 64 位的指针并生成 AMD x86-64 架构的代码。
对于 darwin,仅 -m64 选项会关闭 -fno-pic 和
-mdynamic-no-pic 选项。

-arch //已经包含在问题中

I'm not sure but from reading the man page I get to similar conclusions as you do.

I guess the only real difference is that -arch can be used to create universal binaries.

As this works to create universal binaries

gcc -arch i386 -arch x86_64 foo.c

but you actually can't be sure what the semantics of the following should be (they probably are even invalid syntax). Especially the third should be invalid as the man pages says to generate for for 32- or 64-bit environments.

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
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文