编译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文件:
- 找到
ossl_X509_CRL_get0_signature函数,将*psig = crl->signature;替换为:X509_CRL_get0_signature(crl, psig, NULL); - 找到
ossl_X509_REQ_get0_signature函数,将*psig = req->signature;替换为:X509_REQ_get0_signature(req, psig, NULL); - 保存修改后,重新执行
make命令即可完成编译。
内容的提问来源于stack exchange,提问作者NarineM
相关产品推荐
相关产品推荐

