You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

编译C++程序出现EVP系列函数未定义引用错误求助

解决OpenSSL链接阶段的未定义引用错误

你遇到的是链接器无法找到OpenSSL特定函数实现的问题,像undefined reference to EVP_MD_CTX_reset、EVP_sha3_224这类报错,核心原因要么是OpenSSL版本不兼容,要么是链接参数配置出了问题。下面是针对性的解决方案:

1. 先确认OpenSSL版本是否达标

报错里的两个关键函数都要求OpenSSL 1.1.0及以上版本:

  • EVP_MD_CTX_reset是1.1.0版本引入的,用来替代旧版的EVP_MD_CTX_cleanup
  • SHA3系列哈希函数(EVP_sha3_224/256/384等)也是从1.1.0开始正式加入OpenSSL的

运行这条命令查看你的当前版本:

openssl version

如果版本低于1.1.0,直接升级到最新稳定版(比如1.1.1系列或者3.x系列)就能解决大部分问题。

2. 版本达标但仍报错?调整链接参数

如果你的OpenSSL版本符合要求,但报错依旧,可能是链接器找不到库文件,或者路径/顺序配置不对:

  • 确保库参数放在编译文件之后:虽然你的命令已经这么做了,但再确认下格式(链接库必须放在源文件/目标文件之后):
    g++ main.cpp crypto/Sign.cpp -o main -lssl -lcrypto
    
  • 指定自定义安装的OpenSSL路径:如果你是手动编译安装的OpenSSL(不是系统默认包),需要显式指定头文件和库路径:
    g++ main.cpp crypto/Sign.cpp -o main -I/usr/local/openssl/include -L/usr/local/openssl/lib -lssl -lcrypto
    
    把/usr/local/openssl换成你实际的安装路径即可。

3. 确认OpenSSL编译时启用了SHA3支持

部分系统默认的OpenSSL包可能没有编译SHA3模块,如果你是自己编译的OpenSSL,重新编译时要显式开启SHA3支持:

cd openssl-source-dir
./config enable-sha3
make && sudo make install

完成上述步骤后,重新运行你的编译命令,应该就能解决这些未定义引用的问题了。

内容的提问来源于stack exchange,提问作者Nash

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 09:03:53