Mac M1通过RVM安装ARM64 Ruby时遇dyld缺失符号问题
解决M1 Mac上ARM64架构Ruby启动Rails报错
dyld[*****]: missing symbol called的方案 彻底清理ARM64 Ruby环境残留
- 卸载当前RVM中的ARM64 Ruby版本:
rvm uninstall 3.0.5 - 清理RVM编译缓存及冗余文件:
rvm cleanup all - 验证Homebrew依赖的架构一致性,以libffi为例:
若输出不含file $(brew --prefix libffi)/lib/libffi.dylibarm64,则卸载重装ARM64版本:
对libyaml执行同样的检查和重装操作。brew uninstall libffi && brew install libffi
- 卸载当前RVM中的ARM64 Ruby版本:
重新指定环境变量编译ARM64 Ruby
- 确认终端为原生ARM64模式(非Rosetta),执行
arch命令验证输出为arm64。 - 设置编译环境变量,明确指向ARM64依赖路径:
export PATH="/opt/homebrew/bin:$PATH" export LDFLAGS="-L/opt/homebrew/opt/libffi/lib -L/opt/homebrew/opt/libyaml/lib" export CPPFLAGS="-I/opt/homebrew/opt/libffi/include -I/opt/homebrew/opt/libyaml/include" export PKG_CONFIG_PATH="/opt/homebrew/opt/libffi/lib/pkgconfig:/opt/homebrew/opt/libyaml/lib/pkgconfig" - 用RVM重新编译安装指定架构的Ruby:
rvm install 3.0.5 --with-arch=arm64
- 确认终端为原生ARM64模式(非Rosetta),执行
检查并修复Gem依赖的架构一致性
- 清理旧Gem缓存:
bundle clean --force - 重新执行
bundle install。 - 检查关键原生扩展Gem的架构,以ffi为例:
若输出不含file $(bundle show ffi)/lib/ffi_c.bundlearm64,则卸载并重新安装该Gem:
对nokogiri等其他原生扩展Gem执行同样检查。bundle exec gem uninstall ffi && bundle install
- 清理旧Gem缓存:
排查系统动态库冲突
- 用
dyld_info查看Rails启动依赖的动态库:
检查输出中的依赖库是否存在x86_64架构的文件,若有则替换为ARM64版本。dyld_info -d $(which rails) - 确认当前Ruby环境为RVM管理的ARM64版本:
确保路径指向which ruby~/.rvm/rubies/ruby-3.0.5/bin/ruby这类ARM64版本路径。
- 用
内容的提问来源于stack exchange,提问作者Andy Ruiz
相关产品推荐
相关产品推荐

