在macOS Sierra/High Sierra下用rbenv和ruby-build编译Ruby2.5.0失败求助
解决macOS上rbenv安装Ruby 2.5.0时的OpenSSL编译错误
我之前帮不少开发者处理过这个问题——你遇到的ossl_x509cert.c类型错误,本质是Ruby 2.5.0和OpenSSL 1.1.x版本的API不兼容导致的。Ruby 2.5.0发布时,OpenSSL 1.1.x的一些接口还没被它的openssl扩展适配,所以编译时会出现指针类型错误。下面是几个经过验证的解决方法:
方法一:指定兼容的OpenSSL版本安装
系统自带的或者通过Homebrew安装的OpenSSL 1.0.x版本和Ruby 2.5.0完全兼容,你可以直接指定这个路径来安装:
- 如果还没安装OpenSSL 1.0,先通过Homebrew安装:
brew install openssl@1.0 - 用指定的OpenSSL目录安装Ruby 2.5.0:
RUBY_CONFIGURE_OPTS="--with-openssl-dir=/usr/local/opt/openssl@1.0" rbenv install 2.5.0
方法二:更新ruby-build到最新版本
旧版本的ruby-build可能没有包含Ruby 2.5.0适配OpenSSL 1.1.x的补丁,更新后就能自动处理这个问题:
- 如果你是用Homebrew安装的ruby-build:
brew upgrade ruby-build - 如果你是通过Git克隆的ruby-build插件:
cd ~/.rbenv/plugins/ruby-build && git pull
更新完成后,重新执行安装命令即可:
rbenv install 2.5.0
方法三:手动修改源码修复错误(进阶方案)
如果前两种方法都没解决,你可以手动修改Ruby源码里的错误行:
- 找到报错里提到的临时工作目录(比如你这里的
/var/folders/5q/dy9blchn6fq1_673pm0ybt0h0000gn/T/ruby-build.20180102205530.13528),进入Ruby源码的openssl扩展目录:cd /var/folders/5q/dy9blchn6fq1_673pm0ybt0h0000gn/T/ruby-build.20180102205530.13528/ruby-2.5.0/ext/openssl - 编辑
ossl_x509cert.c文件,找到报错的第334行:
修改为:if (!i2a_ASN1_OBJECT(out, X509_get0_tbs_sigalg(x509)->algorithm)) {const ASN1_OBJECT *alg = X509_get0_tbs_sigalg(x509)->algorithm; if (!i2a_ASN1_OBJECT(out, alg)) { - 回到临时目录的根目录,重新编译安装:
cd ../.. make && make install
另外你提到在High Sierra用Xcode的gcc也遇到同样问题,这很正常——因为问题根源是Ruby和OpenSSL的版本兼容,和编译器无关,所以上面的方法在High Sierra上同样适用。
内容的提问来源于stack exchange,提问作者montblanc18
相关产品推荐
相关产品推荐

