【问题标题】:How to build an Intel binary on an M1 Mac from the command line with the standard Apple version of clang?如何使用标准 Apple 版本的 clang 从命令行在 M1 Mac 上构建 Intel 二进制文件?
【发布时间】:2021-08-28 21:11:00
【问题描述】:

我正在 M1 MacBook Air 上使用一些 C 代码,并查看使用各种优化级别生成的程序集。

我正在使用最基本的命令从命令行构建一个 C 文件:

cc foo.c -o foo

我使用什么开关来构建 Intel 二进制文件而不是 ARM?英特尔有不同的好处吗? 32 对 64 位?也许甚至更旧的 CPU 指令集?这对 Google 来说非常困难,但我是 Apple 生态系统的新手。

胖二进制文件呢?如何从命令行构建包含 Intel 和 ARM 代码的单个二进制文件?

(出于这个问题的目的,我只对我可以在命令行上做什么感兴趣。如果我需要设置 XCode 项目或环境变量,那么我会接受一个只说“你可以”的答案不要只用命令行来做”。)

【问题讨论】:

  • 我想我可能还需要一些默认情况下未安装的链接阶段的 SDK 或目标文件?

标签: macos command-line clang cross-compiling intel


【解决方案1】:

自 Catalina 以来,英特尔 32 位无法在 macOS 上执行。自 2006 年以来的每台 Mac,除了配备 Core Solo 处理器的原始 Intel Mac mini 外,都支持 64 位。

英特尔: 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,所以我可能可以在上面构建我的代码。无论如何,这并不重要,只是对 asm 的外观感到好奇。感谢您的工作答案!
  • 我在我的 intel mac 上使用第二个命令生成 arm64 程序集,但它给出: main.c:1:10: fatal error: 'unistd.h' file not found #include ^~~~~~~~~~ 1 个错误产生。
猜你喜欢
  • 2021-03-29
  • 1970-01-01
  • 1970-01-01
  • 2021-06-04
  • 2021-08-22
  • 1970-01-01
  • 2022-01-25
  • 2021-06-14
  • 2021-09-07
相关资源
最近更新 更多