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

Ubuntu20.04下Crypto++ SHA1示例编译报undefined reference错误求助

编译失败原因分析

出现CryptoPP相关接口未定义的链接错误,本质是ABI不匹配,根源是Ubuntu 20.04官方源提供的libcrypto++ 8.5包的编译配置,和你本地编译代码时的默认配置不一致,具体如下:

  • Ubuntu官方编译libcrypto++ 8.5包时,默认开启了_GLIBCXX_USE_CXX11_ABI=1(对应gcc 5及以后版本的新ABI,适配C11及更高标准的std::string、std::list实现),同时Crypto库本身编译时带了CRYPTOPP_CXX11_ABI=1宏定义。如果编译代码时没有匹配的宏定义和C++标准,头文件声明的符号名和库中实际导出的符号名就会出现差异,导致链接时找不到对应接口定义。
  • 部分环境下手动指定-lcryptopp会优先链接到系统中残留的旧版本Crypto++库,而非新安装的8.5版本,也会出现符号不匹配的问题。
解决方案

优先使用pkg-config读取官方配置的编译、链接参数即可解决问题,编译命令如下:

g++ -o test test.cpp $(pkg-config --cflags --libs libcrypto++) -lpthread

如果仍然报错,可以显式指定C++标准和ABI宏:

g++ -std=c++17 -D_GLIBCXX_USE_CXX11_ABI=1 -o test test.cpp -lcryptopp -lpthread

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.14 09:36:02