使用make安装Squid Proxy出现-Werror=stringop-truncation报错如何解决
错误原因
该编译报错由高版本GCC的字符串安全检查规则触发:编译参数中开启了-Werror=stringop-truncation,会将strncpy函数可能产生的字符串截断警告直接转为编译错误。你使用的Squid 3.5.x属于老旧版本,其内置的smblib模块代码编写时未适配该检查规则,因此编译中断。
可用解决方案
- 方案1(无需修改源码,操作最简便):编译时禁用该规则的错误判定
先清理之前的编译残留文件:
重新执行configure配置时注入CFLAGS参数:make clean
配置完成后正常编译安装即可:CFLAGS="-Wno-error=stringop-truncation" ./configure [替换为你之前配置时使用的其他参数]make && make install - 方案2(无SMB需求优先选择):直接禁用smblib模块
绝大多数Squid的使用场景不需要SMB Windows域交互功能,可在configure配置时直接关闭该模块编译,从根源规避报错:
后续正常编译安装即可。./configure [你的其他配置参数] --disable-smblib - 方案3(需要保留SMB功能时选择):修改源码适配安全规则
打开报错文件lib/smblib/smblib-util.c,将所有触发报错的strncpy调用补加字符串结束符逻辑,示例修改如下:
原代码:
修改为:strncpy(tree->path, path, sizeof(tree->path));
所有报错的strncpy(tree->path, path, sizeof(tree->path)-1); tree->path[sizeof(tree->path)-1] = '\0';strncpy调用都按照上述逻辑修改后,重新执行编译即可。
内容的提问来源于stack exchange,提问作者Sayand K
相关产品推荐
相关产品推荐

