在Qt Creator中使用Crypto++时出现未定义引用问题
解决Windows下Qt Creator(qmake)链接Crypto++的未定义引用问题
核心原因
你遇到的大量未定义引用错误,本质是编译Crypto++的编译器和Qt项目使用的编译器不兼容:
- 你用Visual Studio编译的
cryptlib.lib是MSVC格式的库,而Qt Creator默认使用MinGW编译器,MinGW的链接器无法识别MSVC生成的.lib文件; - 即使都是MSVC,也需要保证编译器版本、调试/发布模式、运行时库设置完全匹配。
分步解决方案
1. 先确认Qt项目的编译器类型
打开Qt Creator → 工具 → 选项 → Kits,查看当前使用Kit的编译器是MinGW还是MSVC,再对应处理:
情况1:Qt使用MinGW编译器(最常见)
MinGW只能链接自己编译生成的库,必须用MinGW重新编译Crypto++:
打开Qt自带的MinGW终端(比如
Qt 6.x.x MinGW 64-bit命令行)进入Crypto++源码目录:
cd C:\Users\username\Downloads\cryptopp880执行编译命令(生成静态库,指定C++17标准):
mingw32-make -f GNUmakefile-cross static CXXFLAGS="-std=c++17 -O2"编译完成后,目录下会生成
libcryptopp.a,这是MinGW能识别的静态库。修改Qt项目的
.pro文件:# 头文件路径 INCLUDEPATH += "C:\Users\username\Downloads\cryptopp880" DEPENDPATH += "C:\Users\username\Downloads\cryptopp880" # 链接MinGW生成的静态库 LIBS += -L"C:\Users\username\Downloads\cryptopp880" -lcryptopp
情况2:Qt使用MSVC编译器
需要严格保证Crypto++的编译配置和Qt项目完全一致:
- 用和Qt版本匹配的Visual Studio编译Crypto++(比如Qt用VS2019,就用VS2019打开Crypto++的工程)
- 匹配调试/发布模式:
- Qt项目是Debug,Crypto++就编译Debug版本(生成
cryptlibd.lib) - Qt项目是Release,Crypto++就编译Release版本(生成
cryptlib.lib)
- Qt项目是Debug,Crypto++就编译Debug版本(生成
- 统一运行时库设置:
- 在Qt的
.pro文件中添加:# Debug模式用多线程调试DLL win32:CONFIG(debug, debug|release): QMAKE_CXXFLAGS += /MDd # Release模式用多线程DLL win32:CONFIG(release, debug|release): QMAKE_CXXFLAGS += /MD - 在VS的Crypto++工程属性中,设置
C/C++→代码生成→运行时库为对应选项:Debug选多线程调试 DLL (/MDd),Release选多线程 DLL (/MD)
- 在Qt的
- 修改
.pro文件的库链接配置:INCLUDEPATH += "C:\Users\username\Downloads\cryptopp880" DEPENDPATH += "C:\Users\username\Downloads\cryptopp880" # 按模式链接对应库 win32:CONFIG(release, debug|release): LIBS += -L"C:\Users\username\Downloads\cryptopp880\x64\Output\Release" -lcryptlib win32:CONFIG(debug, debug|release): LIBS += -L"C:\Users\username\Downloads\cryptopp880\x64\Output\Debug" -lcryptlibd
最后检查
- 确认Qt项目和Crypto的C标准都设置为C++17
- 清理Qt项目的构建目录,重新构建(
构建→清理项目→构建项目) - 不要混合使用静态和动态运行时库,全程保持一致
内容的提问来源于stack exchange,提问作者Ryan
相关产品推荐
相关产品推荐

