编译httpd-2.4.57搭配OpenSSL3.0.7时遇废弃函数及链接错误
编译httpd-2.4.57搭配OpenSSL 3.0.7的错误解决方法
问题根源
httpd-2.4.57的ab(Apache Bench)工具代码未适配OpenSSL 3.0的API变更,导致编译时出现废弃API警告,以及链接阶段的未定义引用错误。
解决方法
方法1:禁用ab工具编译(快速解决)
如果不需要使用ab压力测试工具,可在configure阶段添加参数跳过它的编译:
./configure --with-ssl=/usr/local/ssl --disable-ab [其他你需要的configure参数]
之后重新执行make && make install即可完成编译。
方法2:升级httpd到兼容版本
httpd 2.4.58及后续版本已修复与OpenSSL 3.0的兼容性问题,直接下载对应版本重新编译即可避免该错误。
方法3:手动修改ab.c代码适配OpenSSL 3.0 API
进入httpd源码的support目录,编辑ab.c文件,修改以下内容:
替换废弃的EC_KEY相关函数:
- 将
EVP_PKEY_get1_EC_KEY(key)替换为EVP_PKEY_get_EC_KEY(key) - 将
EC_KEY_get0_group(ec)替换为EC_KEY_get_group(ec) EC_KEY_free(ec)可保留,若要彻底消除警告,需调整为OpenSSL 3.0新密钥管理API,但改动较大,建议保留原函数
- 将
替换未定义引用的函数:
- 将
EVP_PKEY_get_bits(pkey)替换为EVP_PKEY_bits(pkey) - 将
EVP_PKEY_get_id(pkey)替换为EVP_PKEY_id(pkey)
- 将
修改完成后,重新执行make && make install。
方法4:确保configure正确识别OpenSSL路径
若为链接参数问题,重新执行configure时明确指定OpenSSL的安装路径:
./configure --with-ssl=/usr/local/ssl [其他你需要的configure参数]
确保OpenSSL的库和头文件路径被正确识别后,再重新编译。
内容的提问来源于stack exchange,提问作者Sheshan Gamage
相关产品推荐
相关产品推荐

