macOS 中 Rosetta 模拟器打开,造成 MLX 框架的错误

概述

背景

  • 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 或清理构建缓存。
posted @ 2024-09-14 16:11  立体风  阅读(129)  评论(0编辑  收藏  举报