如何在M1 Mac上使用标准的Apple版本的clang命令行构建Intel二进制文件?

7
我正在我的 M1 MacBook Air 上尝试一些 C 代码,并查看使用各种优化级别生成的汇编代码。
我使用最基本的命令从命令行构建单个 C 文件:
`cc foo.c -o foo`
要构建英特尔二进制文件,我需要使用哪个开关?是否有不同类型的英特尔二进制文件?32 位和 64 位之分?甚至是旧的 CPU 指令集?这在谷歌搜索中非常难找到,但我对苹果生态系统还很陌生。
那么胖二进制文件呢?如何从命令行构建包含英特尔和 ARM 代码的单个二进制文件?
(对于此问题,我只对可以在命令行上执行的操作感兴趣。如果需要设置 XCode 项目或环境变量,则可以接受回答“您不能仅使用命令行完成”。)

我在想链接阶段可能还需要一些SDK或对象文件,这些文件默认情况下没有安装? - hippietrail
1个回答

15

自Catalina以来,在macOS上无法运行Intel 32位软件。自2006年以来,除了带有Core Solo处理器的原始Intel Mac mini外,每台Mac都支持64位。

Intel: clang -o myTool-x86_64 -mmacosx-version-min=10.15 -arch x86_64 main.c

ARM64: clang -o myTool-arm64 -mmacosx-version-min=10.15 -arch arm64 main.c

FAT二进制文件: lipo myTool-x86_64 myTool-arm64 -create -output myTool


我知道32位已不再被支持,但有时候工具中仍可能存在。不过,我还有一台安装了Mountain Lion的旧Mac,所以我可能可以在上面构建我的代码。这并不是必要的,只是出于对汇编代码可能看起来像什么的好奇心。感谢您的可行答案! - hippietrail
1
我在我的英特尔 Mac 上使用第二个命令生成 arm64 汇编,但出现以下错误: main.c:1:10: 致命错误: 找不到 'unistd.h' 文件 #include <unistd.h> ^~~~~~~~~~ 已生成 1 个错误。 - zendevil.eth

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