Ubuntu 20.04.6编译net-snmp-5.7.3时make报错求解决
解决Ubuntu 20.04.6编译net-snmp-5.7.3时的OpenSSL兼容性错误
问题原因
net-snmp 5.7.3是较旧的版本,而Ubuntu 20.04.6默认使用的OpenSSL 1.1.1对EVP_MD_CTX相关API做了不兼容改动:
EVP_MD_CTX变为不透明结构体,无法直接通过malloc分配内存EVP_MD_CTX_cleanup函数已被废弃,替代为EVP_MD_CTX_free
sudo执行无效是因为这是代码兼容性问题,不是权限问题。
解决方法
方法1:手动修改代码适配OpenSSL 1.1.1
编辑net-snmp解压目录下的agent/mibgroup/agentx/keytools.c文件:
- 确保文件开头包含OpenSSL头文件:
#include <openssl/evp.h> - 替换第155行的内存分配代码:
原代码:
修改为:ctx = malloc(sizeof(*ctx));ctx = EVP_MD_CTX_new(); - 替换第265行的清理代码:
原代码:
修改为:EVP_MD_CTX_cleanup(ctx);EVP_MD_CTX_free(ctx); - 同时检查文件中是否有
free(ctx);语句,如果有也需要替换为EVP_MD_CTX_free(ctx); - 保存文件后重新执行
make
方法2:使用适配系统的net-snmp版本
- 直接安装Ubuntu官方仓库中的预编译包(推荐):
sudo apt update && sudo apt install snmpd libsnmp-dev - 若坚持源码编译,更换为net-snmp 5.8及以上版本,这些版本已原生适配OpenSSL 1.1.1
方法3:重新配置编译选项
重新运行configure时明确指定OpenSSL支持,确保链接正确的库:
./configure --with-openssl make
内容的提问来源于stack exchange,提问作者pleaseDontBullyMe
相关产品推荐
相关产品推荐

