使用OpenSSL编译Squid时make报错(调用废弃函数)如何解决?
问题根因确认
你的推测完全正确,报错是-Werror=deprecated-declarations参数触发的:该参数会将编译器检测到的「调用废弃API」警告直接转为错误终止编译,这是Squid默认开启的严格编译规则,OpenSSL 3.0版本废弃了包括RSA_free在内的大量旧版本加密API,和低版本Squid的调用逻辑冲突就会触发该报错。
参数所在位置
-Werror=deprecated-declarations一般来源于两个位置:
- Squid源码的
compilerfeatures.m4宏定义文件,是编译前configure脚本执行时用于生成Makefile的内置规则 - 执行完
configure后生成的根目录Makefile、src/Makefile文件中,作为编译参数直接定义
解决方法
- 方法1(最推荐,无需修改配置文件):执行configure阶段直接注入忽略规则,命令如下:
配置完成后正常执行./configure --with-openssl [你原本使用的其他编译参数] CFLAGS="-Wno-error=deprecated-declarations" CXXFLAGS="-Wno-error=deprecated-declarations"make && make install即可完成编译。 - 方法2:手动修改Makefile删除规则
执行完默认configure后,打开生成的所有Makefile文件,搜索-Werror=deprecated-declarations字段直接删除,之后再执行make编译即可。 - 方法3:升级Squid到5.7及以上稳定版本,高版本已经完成OpenSSL 3.0 API适配,默认不会触发该类报错,无需额外修改编译参数。
内容的提问来源于stack exchange,提问作者france1
相关产品推荐
相关产品推荐

