Ruby Gems安装遇架构不兼容错误,寻求解决方法
问题描述
尝试通过Ruby Gems安装ocra时,收到如下提示:
gem install ocra Ignoring strscan-3.0.4 because its extensions are not built. Try: gem pristine strscan --version 3.0.4
按照提示执行gem pristine strscan --version 3.0.4后,执行gem install rails安装rails时出现错误:
<internal:/Users/myname/.rbenv/versions/3.1.2/lib/ruby/3.1.0/rubygems/core_ext/kernel_require.rb>:85:in `require': dlopen(/Users/myname/.gem/gems/strscan-3.0.4/lib/strscan.bundle, 0x0009): tried: '/Users/myname/.gem/gems/strscan-3.0.4/lib/strscan.bundle' (mach-o file, but is an incompatible architecture (have 'x86_64', need 'arm64e')) - /Users/myname/.gem/gems/strscan-3.0.4/lib/strscan.bundle (LoadError)
核心问题为架构不兼容:
(mach-o file, but is an incompatible architecture (have 'x86_64', need 'arm64e'))
运行arch命令返回结果为arm64,且执行任何gem命令都会触发相同错误。
解决方案
彻底清理并重装适配架构的strscan gem
先卸载不兼容版本,再强制编译适配arm64的扩展:gem uninstall strscan --version 3.0.4 gem install strscan --version 3.0.4 -- --enable-shared重新编译rbenv管理的Ruby版本
若当前Ruby版本是基于x86_64架构编译的,需重新编译适配arm64:# 卸载现有3.1.2版本 rbenv uninstall 3.1.2 # 设置编译参数,指定arm64架构及依赖路径 export RUBY_CONFIGURE_OPTS="--enable-shared --with-openssl-dir=$(brew --prefix openssl)" export CC="clang" # 重新安装Ruby rbenv install 3.1.2 # 切换全局版本并刷新环境 rbenv global 3.1.2 rbenv rehash检查终端运行模式
若终端在Rosetta模式下运行,会导致编译出x86_64架构的gem:- 访达中找到「终端」应用(/Applications/Utilities/终端.app)
- 右键选择「显示简介」,取消勾选「使用Rosetta打开」
- 重启终端后,确认
arch命令返回arm64,再重新安装相关gem
清理gem缓存残留
若缓存中仍有旧架构的文件,清理后重装:gem cleanup strscan rm -rf ~/.gem/gems/strscan-3.0.4 gem install strscan --version 3.0.4
内容的提问来源于stack exchange,提问作者Caecilius-rgb
相关产品推荐
相关产品推荐

