You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在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完全兼容,你可以直接指定这个路径来安装:

  1. 如果还没安装OpenSSL 1.0,先通过Homebrew安装:
    brew install openssl@1.0
    
  2. 用指定的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源码里的错误行:

  1. 找到报错里提到的临时工作目录(比如你这里的/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
    
  2. 编辑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)) {
    
  3. 回到临时目录的根目录,重新编译安装:
    cd ../..
    make && make install
    

另外你提到在High Sierra用Xcode的gcc也遇到同样问题,这很正常——因为问题根源是Ruby和OpenSSL的版本兼容,和编译器无关,所以上面的方法在High Sierra上同样适用。

内容的提问来源于stack exchange,提问作者montblanc18

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 06:52:45