You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

macOS中arch -arch命令如何实现Rosetta启用与二进制架构强制?

关于macOS中arch命令工作机制的疑问

在搭载ARM处理器的macOS系统上使用Rosetta时,可通过arch命令强制指定被包裹的命令以特定架构执行。例如,arch -arch x86_64 mycommand会尝试以x86/Intel程序的方式启动mycommand:若mycommand仅支持ARM则会执行失败;若为universal二进制文件,则会以x86架构运行。

我对arch -arch ...命令的实际工作机制存在以下疑问:

  1. arch -arch $arch $program通过何种机制从universal二进制文件$program中选择对应$arch的版本并运行?
  2. arch -arch $arch $program尝试以指定架构$arch运行非universal二进制文件$program时,是通过何种机制在二进制不支持该架构时触发失败?
  3. 是否存在无需调用arch命令,由其他程序实现相同功能的方式?即使是不推荐的私有macOS API,我也想了解其实现原理。

我提出这些问题仅出于好奇,并非要规避arch命令的功能。

我已尝试的方法:

  • 研究制作universal二进制文件时lipo工具的内部原理,发现lipo是将不同架构的二进制文件拼接在Mach-O“fat binary”容器中,顶部通过特定标识指明各内容的位置。这对解答第一个疑问有一定帮助,但无法解决后两个问题。
  • 研究mach_object等fat二进制解析工具,理论上可以从fat二进制文件中提取对应架构的子二进制,转储到临时文件后执行,但这种方式存在诸多问题(如工作目录错误、仅为启动程序而写入文件过于冗余)。

内容的提问来源于stack exchange,提问作者Zac B

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 16:39:52