M1 Mac运行gem报错:mach-o架构不兼容(x86_64/arm64e)
M1 Mac Ruby项目gem架构不兼容问题解决(strscan x86_64/arm64e冲突)
问题重现
执行gem命令时触发架构不兼容错误:
<internal:/Users/matti/.rvm/rubies/ruby-3.1.2/lib/ruby/3.1.0/rubygems/core_ext/kernel_require.rb>:85:in `require': dlopen(/Users/matti/.rvm/gems/ruby-3.1.2/gems/strscan-3.0.3/lib/strscan.bundle, 0x0009): tried: '/Users/matti/.rvm/gems/ruby-3.1.2/gems/strscan-3.0.3/lib/strscan.bundle' (mach-o file, but is an incompatible architecture (have (x86_64), need (arm64e))) - /Users/matti/.rvm/gems/ruby-3.1.2/gems/strscan-3.0.3/lib/strscan.bundle (LoadError)
当前Ruby版本为:
ruby 3.1.2p20 (2022-04-12 revision 4491bb740a) [arm64-darwin21]
已尝试gem uninstall、gem -arch -arm64e等操作,无效。
解决方案
1. 确认终端架构(关键前提)
确保使用原生ARM64终端,而非Rosetta模拟的x86终端:
- 打开访达,找到「终端」应用,右键选择「显示简介」
- 取消勾选「使用Rosetta打开」,重启终端
- 执行
arch命令验证,输出应为arm64
2. 强制重新编译arm64版本的strscan gem
# 彻底卸载所有版本的strscan gem uninstall strscan --all # 设置编译架构为arm64e export ARCHFLAGS="-arch arm64e" # 强制从源码编译安装,避免使用预编译的x86包 gem install strscan --platform=ruby
3. 极端情况:重新编译ARM64原生Ruby
如果上述步骤无效,说明当前Ruby版本可能存在编译残留,需彻底重装:
# 卸载现有Ruby版本 rvm uninstall 3.1.2 # 清理rvm缓存 rvm cleanup all # 设置架构后从源码编译安装Ruby export ARCHFLAGS="-arch arm64e" && rvm install 3.1.2 --disable-binary
验证
安装完成后,执行以下命令确认:
# 确认Ruby架构 ruby -v # 确认strscan gem已安装且为arm64架构 gem list strscan # 检查bundle文件架构 lipo -info /Users/matti/.rvm/gems/ruby-3.1.2/gems/strscan-*/lib/strscan.bundle
输出应显示arm64或arm64e架构。
内容的提问来源于stack exchange,提问作者Matti
相关产品推荐
相关产品推荐

