概述
背景
- Apple Silicon (M1, M2 芯片) 是基于 ARM 架构的,而老的 Intel Mac 是基于 x86_64 架构的。
- Rosetta 2 是 macOS 提供的工具,用于在 Apple Silicon 上模拟运行 x86 应用程序。
- 某些应用程序(如终端)可能默认通过 Rosetta 运行为 x86 架构,而不是 ARM 原生运行。
在安装及编译 MLX 框架时,由于模拟器 rosetta 打开,造成很多错误。
下面说明,如何检查和解决在 Apple Silicon (ARM架构) 上运行的终端和编译工具(如 CMake)错误地使用了 x86 架构 的问题,尤其是在使用 Rosetta 2 模拟器时。
解决
1. 检查 Shell 的架构
通过以下命令检查你的 Shell 是否在使用 x86 架构:
uname -p
- 如果输出为
x86
,说明你的终端正在通过 Rosetta 以 x86 模式运行,而不是以 ARM 原生模式运行。
2. 修复终端以 ARM 模式运行
要修复这个问题,你需要在 Finder 中找到相应的终端应用程序:
- iTerm 在
/Applications
目录中,macOS 自带的终端在/Applications/Utilities
目录中。 - 右键点击应用程序,选择 "Get Info"(显示简介)。
- 在弹出的窗口中,找到 “Open using Rosetta”(使用 Rosetta 打开)的选项,取消勾选。
- 关闭窗口,重启终端。
3. 验证终端是否以 ARM 模式运行
重新打开终端后,使用以下命令验证它是否已经以 ARM 模式运行:
uname -p
- 如果输出为
arm
,则表示你的终端现在以 ARM 原生模式运行。
4. 检查 CMake 的架构
运行以下命令,检查 CMake 是否使用了正确的架构:
cmake --system-information | grep CMAKE_HOST_SYSTEM_PROCESSOR
- 你希望看到输出为
arm64
,这表示 CMake 正在使用 ARM 架构进行编译。 - 如果输出为
x86_64
,说明 CMake 仍然在使用 x86 架构。
5. 重新安装 CMake
如果 CMake 显示 x86_64
,则说明它没有正确安装为 ARM 版本。此时,你需要重新安装 CMake,以确保它在 ARM 平台上运行。
6. 清理构建缓存并重试
如果 CMake 显示 arm64
,但编译过程中仍然出现以下错误:
Building for x86_64 on macOS is not supported.
说明构建缓存可能仍然残留了 x86_64 的数据。此时需要清理构建缓存:
rm -rf build/
然后重新构建项目。
总结:
- 这段文字解释了如何确保你的终端和 CMake 工具在 Apple Silicon (ARM) 上运行为原生 ARM 架构,而不是通过 Rosetta 运行为 x86 架构。
- 通过检查
uname -p
和 CMake 架构,确保编译环境正确匹配 ARM64 平台,并在必要时重新安装 CMake 或清理构建缓存。