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

Mac环境下安装Ruby 3.1.3时OpenSSL错误的解决方法

问题

执行ruby-install ruby 3.1.3安装Ruby时编译失败,错误提示与OpenSSL版本冲突有关。已知Ruby 3.1及以上版本需要OpenSSL 3,但安装过程中实际调用了OpenSSL 1.1,且已按GitHub说明配置RUBY_CONFIGURE_OPTS,仍无法解决。

错误信息:

ossl_ts.c:829:5: error: incomplete definition of type 'struct TS_verify_ctx'
    TS_VERIFY_CTX_set_certs(ctx, x509inter);
    ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
./openssl_missing.h:215:46: note: expanded from macro 'TS_VERIFY_CTX_set_certs'
#  define TS_VERIFY_CTX_set_certs(ctx, crts) TS_VERIFY_CTS_set_certs(ctx, crts)
                                             ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
./openssl_missing.h:195:52: note: expanded from macro 'TS_VERIFY_CTS_set_certs'
#  define TS_VERIFY_CTS_set_certs(ctx, crts) ((ctx)->certs=(crts))
                                              ~~~~~^
/opt/homebrew/Cellar/openssl@3/3.1.3/include/openssl/ts.h:407:16: note: forward declaration of 'struct TS_verify_ctx'
typedef struct TS_verify_ctx TS_VERIFY_CTX;
               ^
1 warning and 1 error generated.
make[2]: *** [ossl_ts.o] Error 1
make[1]: *** [ext/openssl/all] Error 2
make: *** [build-ext] Error 2
!!! Compiling ruby 3.1.3 failed!

已尝试多个相关方案但未解决。

解决方案

  • 强制指定OpenSSL 3路径执行安装
    先确认OpenSSL 3的安装路径(Homebrew安装的默认路径为/opt/homebrew/opt/openssl@3),执行以下命令安装:

    RUBY_CONFIGURE_OPTS="--with-openssl-dir=/opt/homebrew/opt/openssl@3" ruby-install ruby 3.1.3
    

    Linux系统下路径可能为/usr/local/opt/openssl@3或/usr/lib/openssl-3,根据实际情况调整。

  • 清理环境变量中的旧OpenSSL引用
    检查当前环境是否有指向OpenSSL 1.1的变量:

    echo $PATH
    echo $LDFLAGS
    echo $CPPFLAGS
    

    如果输出包含OpenSSL 1.1的路径,临时移除后再执行安装:

    export PATH=$(echo $PATH | sed 's/\/opt\/homebrew\/opt\/openssl@1.1\/bin://g')
    export LDFLAGS=$(echo $LDFLAGS | sed 's/\-L\/opt\/homebrew\/opt\/openssl@1.1\/lib://g')
    export CPPFLAGS=$(echo $CPPFLAGS | sed 's/\-I\/opt\/homebrew\/opt\/openssl@1.1\/include://g')
    

    之后重新运行ruby-install命令。

  • 改用ruby-build工具安装
    如果ruby-install问题无法解决,尝试用ruby-build:

    brew install ruby-build
    export RUBY_CONFIGURE_OPTS="--with-openssl-dir=/opt/homebrew/opt/openssl@3"
    ruby-build 3.1.3 ~/.rbenv/versions/3.1.3
    
  • 手动打OpenSSL兼容补丁
    该错误源于Ruby 3.1.3的openssl扩展与OpenSSL 3 API不兼容,手动应用补丁:

    1. 下载Ruby 3.1.3源码但不安装:
      ruby-install --src-dir=/tmp/ruby-src ruby 3.1.3 --no-install
      
    2. 进入openssl扩展目录:
      cd /tmp/ruby-src/ruby-3.1.3/ext/openssl
      
    3. 从ruby/openssl仓库的PR#639获取对应兼容补丁,保存到本地后应用:
      patch -p1 < path/to/639.patch
      
    4. 手动编译安装:
      cd ../..
      ./configure --with-openssl-dir=/opt/homebrew/opt/openssl@3
      make
      sudo make install
      

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 13:20:18