RVM 安装 ruby​​ 2.6.4 失败并出现 makefile 错误:函数“ffi_prep_closure”的隐式声明在 C99 中无效

Jas*_* FB 4 ruby rvm macos-big-sur

RVM rvm 1.29.12-next

M1 芯片上的 Mac OS Big Sur

rvm install 2.6.4 失败:

Error running '__rvm_make -j8',
please read /Users/jason/.rvm/log/1626110300_ruby-2.6.4/make.log

There has been an error while running make. Halting the installation.
Run Code Online (Sandbox Code Playgroud)

生成文件错误是:

error: implicit declaration of function 'ffi_prep_closure' is invalid in C99 [-Werror,-Wimplicit-function-declaration]
    result = ffi_prep_closure(pcl, cif, callback, (void *)self);
Run Code Online (Sandbox Code Playgroud)

Jas*_* FB 6

这是由您的 shell 中未设置 RVM 的环境标志引起的。

brew info libffi

会告诉你你需要的变量:

要让编译器找到 libffi,您可能需要设置: export LDFLAGS="-L/opt/homebrew/opt/libffi/lib" export CPPFLAGS="-I/opt/homebrew/opt/libffi/include"

对于 pkg-config 查找 libffi,您可能需要设置:export PKG_CONFIG_PATH="/opt/homebrew/opt/libffi/lib/pkgconfig"

对于 ZSH,编辑~/.zshenv并添加:

export LDFLAGS="-L/opt/homebrew/opt/libffi/lib"
export CPPFLAGS="-I/opt/homebrew/opt/libffi/include"
export PKG_CONFIG_PATH="/opt/homebrew/opt/libffi/lib/pkgconfig"
Run Code Online (Sandbox Code Playgroud)

关闭并重新打开您的终端窗口或source ~/.zshrc加载您的更改

检查你的工作

% echo $LDFLAGS
-L/opt/homebrew/opt/libffi/lib
% echo $CPPFLAGS
-I/opt/homebrew/opt/libffi/include
% echo $PKG_CONFIG_PATH
/opt/homebrew/opt/libffi/lib/pkgconfig
Run Code Online (Sandbox Code Playgroud)

(确认环境变量无误)

重新尝试安装您要安装的rvm版本。

  • 适用于 macos big sur 11.4、M1 和 ruby​​ 2.7.0。确保使用“brew install libffi”安装 libffi 以查看所需的变量。 (2认同)