arm64架构Mac通过rvm/rbenv安装ruby-2.2报错如何解决?
报错原因
所有报错的核心原因是你使用的是Apple Silicon(arm64架构)的Mac,运行macOS 11(Big Sur)及以上版本,而Ruby 2.2是官方已停止维护的老旧版本,未适配新架构、新系统和新版编译工具链:
- RVM安装时的
implicit declaration of function 'rb_str_change_terminator_length'报错:你使用的Clang 12编译工具默认开启C99标准严格校验,Ruby 2.2源码中使用的未提前声明的函数在旧版Clang中仅为警告,新版直接判定为错误中断编译。 - rbenv安装时的
ld: symbol(s) not found for architecture i386报错:Ruby 2.2依赖的旧版OpenSSL 1.0.x默认会尝试编译32位(i386)架构的二进制,而macOS从10.15(Catalina)版本开始就完全移除了32位程序支持,且arm64架构本身不兼容i386架构的符号,导致链接失败。
解决方案
方案1:使用ruby-build补丁直接编译适配arm64的Ruby 2.2(无需Rosetta,优先推荐)
- 首先更新rbenv和ruby-build到最新版本,确保内置旧版Ruby的适配补丁:
brew update && brew upgrade rbenv ruby-build
- 安装Ruby 2.2专属兼容的旧版OpenSSL 1.0依赖:
brew install rbenv/tap/openssl@1.0
- 执行安装命令,指定编译器参数关闭严格错误校验、指定OpenSSL路径:
RUBY_CFLAGS="-Wno-error=implicit-function-declaration" RUBY_CONFIGURE_OPTS="--with-openssl-dir=$(brew --prefix openssl@1.0)" rbenv install 2.2.10
- 安装完成后执行
rbenv global 2.2.10或者在项目目录执行rbenv local 2.2.10切换版本,执行ruby -v验证安装是否成功。
方案2:通过Rosetta2模拟x86_64环境安装(方案1失败时使用)
- 右键点击终端应用,选择「显示简介」,勾选「使用Rosetta打开」,重启终端。
- 安装x86版本的Homebrew:
arch -x86_64 /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
- 安装x86版本的rbenv、ruby-build和openssl@1.0:
arch -x86_64 brew install rbenv ruby-build openssl@1.0
- 执行安装命令:
RUBY_CFLAGS="-Wno-error=implicit-function-declaration" RUBY_CONFIGURE_OPTS="--with-openssl-dir=$(arch -x86_64 brew --prefix openssl@1.0)" arch -x86_64 rbenv install 2.2.10
注意事项
- Ruby 2.2已经停止维护超过7年,存在大量已知安全漏洞,仅建议本地开发临时使用,生产环境建议尽快升级项目依赖到更高的Ruby版本。
- 安装完成后如果安装gem出现编译错误,可以在安装gem时也加上对应的CFLAGS参数,比如
gem install 包名 -- --with-cflags="-Wno-error=implicit-function-declaration"。
内容的提问来源于stack exchange,提问作者edlynch82
相关产品推荐
相关产品推荐

