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

编译Ruby 3.2搭配OpenSSL 3.0时出现X509_CRL指针解引用错误

Ruby 3.2 编译时OpenSSL 3.0相关错误解决

环境信息

  • Ruby版本:3.2(对应commit 1c7624469880bcb964be09a49e4907873f45b026)
  • OpenSSL 3.0安装路径:/usr/local_ssl_3.0.0
  • 执行的配置命令:./configure --with-openssl-dir=/usr/local_ssl_3.0.0

编译错误信息

运行make时出现以下错误:

openssl_missing.c:24:13: error: dereferencing pointer to incomplete type ‘X509_CRL {aka const struct X509_crl_st}’
  *psig = crl->signature;
             ^~
openssl_missing.c: In function ‘ossl_X509_REQ_get0_signature’:
openssl_missing.c:36:13: error: dereferencing pointer to incomplete type ‘X509_REQ {aka const struct X509_req_st}’
  *psig = req->signature;
             ^~

错误原因

OpenSSL 3.0开始隐藏了内部结构体的细节,不再允许直接访问X509_CRL、X509_REQ这类结构体的成员变量,而当前Ruby版本的代码仍在使用旧的直接访问方式,导致编译失败。

解决方法

方法1:升级Ruby版本

将Ruby升级到3.2.2及以上版本,这些版本已经修复了与OpenSSL 3.0的兼容性问题,无需修改代码即可正常编译。

方法2:修改Ruby源码适配OpenSSL 3.0

如果必须使用当前Ruby版本,手动修改openssl_missing.c文件:

  1. 找到ossl_X509_CRL_get0_signature函数,将*psig = crl->signature;替换为:
    X509_CRL_get0_signature(crl, psig, NULL);
    
  2. 找到ossl_X509_REQ_get0_signature函数,将*psig = req->signature;替换为:
    X509_REQ_get0_signature(req, psig, NULL);
    
  3. 保存修改后,重新执行make命令即可完成编译。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 20:12:20