macOS M1芯片设备安装Ruby 2.3.8失败,rvm命令报错求助
问题根因
Ruby 2.3.x 系列早在2018年就停止官方维护,没有针对M1系列芯片的arm64架构做兼容,同时你之前执行的安装命令存在两处错误:一是传入的openssl路径指向了二进制可执行文件,而非依赖库的安装根目录;二是arm架构的Homebrew源早已移除openssl@1.0版本的预编译包,直接引用对应路径根本找不到有效依赖。
操作步骤
- 先给终端开启Rosetta转译:右键点击终端应用图标,选择「显示简介」,勾选「使用Rosetta打开」,重启终端后执行
arch命令,确认输出为x86_64再进行后续操作。 - 安装x86架构的Homebrew到
/usr/local路径,和原有arm架构的/opt/homebrew路径隔离,安装完成后执行eval "$(/usr/local/bin/brew shellenv)"切换到x86版本的brew环境。 - 安装Ruby 2.3.8所需的老旧依赖:
brew install rbenv/tap/openssl@1.0 libyaml readline
- 临时设置编译阶段的环境变量,确保编译器能找到对应依赖:
export RUBY_CFLAGS="-w" export opt_prefix="/usr/local/opt" export PATH="$opt_prefix/openssl@1.0/bin:$PATH" export LDFLAGS="-L$opt_prefix/openssl@1.0/lib -L$opt_prefix/readline/lib -L$opt_prefix/libyaml/lib" export CPPFLAGS="-I$opt_prefix/openssl@1.0/include -I$opt_prefix/readline/include -I$opt_prefix/libyaml/include" export PKG_CONFIG_PATH="$opt_prefix/openssl@1.0/lib/pkgconfig:$opt_prefix/readline/lib/pkgconfig:$opt_prefix/libyaml/lib/pkgconfig"
- 清理之前编译失败的残留缓存后重新安装:
rvm cleanup all rvm install 2.3.8 --with-openssl-dir=$opt_prefix/openssl@1.0 --with-readline-dir=$opt_prefix/readline --with-libyaml-dir=$opt_prefix/libyaml
报错排查
- 如果依然触发
__rvm_make -j8错误,不要直接看rvm的截断报错,进入rvm对应的源码目录手动执行make查看完整错误日志,绝大多数场景是未正确切换到Rosetta x86环境导致架构不匹配。 - 如果提示找不到openssl@1.0依赖,先执行
which brew确认输出路径为/usr/local/bin/brew,如果输出是/opt/homebrew/bin/brew说明还在arm架构的brew环境下,重新执行brew环境切换命令即可。
内容的提问来源于stack exchange,提问作者Rebel Rider
相关产品推荐
相关产品推荐

