Mac M1安装Ruby 2.7.1遇ffi_prep_closure未声明函数错误求助
解决Mac M1上rvm安装Ruby 2.7.1时的ffi_prep_closure错误
这个错误源于M1的ARM架构与Ruby 2.7.1的FFI(Foreign Function Interface)组件适配不兼容,再加上C99标准禁止隐式函数声明的限制。以下是针对性的解决步骤:
步骤1:更新rvm到最新稳定版
先确保rvm处于最新状态,避免旧版本带来的兼容性问题:
rvm get stable
步骤2:重新安装适配ARM架构的FFI库
卸载可能存在的x86版本或损坏的FFI,再通过Homebrew安装适配M1的版本:
brew uninstall --ignore-dependencies ffi brew install ffi
步骤3:指定环境变量并安装Ruby 2.7.1
通过环境变量让Ruby安装程序正确定位FFI库,同时添加编译参数忽略隐式函数声明的警告:
export LDFLAGS="-L$(brew --prefix ffi)/lib" export CPPFLAGS="-I$(brew --prefix ffi)/include" export PKG_CONFIG_PATH="$(brew --prefix ffi)/lib/pkgconfig" rvm install ruby-2.7.1 --with-opt-dir=$(brew --prefix ffi)
或者直接用一条命令指定编译选项:
rvm install ruby-2.7.1 --configure-opts="--with-ffi-dir=$(brew --prefix ffi) CFLAGS=-Wno-implicit-function-declaration"
验证安装结果
安装完成后,执行以下命令确认Ruby版本:
ruby -v
若输出显示ruby 2.7.1p83(或对应版本号),则说明安装成功。
内容的提问来源于stack exchange,提问作者Eric.N
相关产品推荐
相关产品推荐

