尝试在 Qt 项目中使用 CryptoPP 库时出现 LNK2001 错误

LNK2001 errors when trying to using CryptoPP lib in a Qt Project

我正在尝试在 Qt 项目中使用 CryptoPP lib。 我首先使用 Visual C++ 2019 构建了 Crytplib。我将运行时选项更改为 MDd(多线程调试 DLL)。它生成了 cryptlib.lib.

在 Qt 中,我添加了:

LIBS += -L$$PWD/../libs/CryptoPP/x64/Output/Release/ -lcryptlib
INCLUDEPATH += $$PWD/../libs/CryptoPP

编译报错如下:

cryptlib.lib(keccak_core.obj) : error LNK2001: symbole externe non résolu __CxxFrameHandler4
cryptlib.lib(ecp.obj) : error LNK2001: symbole externe non résolu __CxxFrameHandler4
cryptlib.lib(rng.obj) : error LNK2001: symbole externe non résolu __CxxFrameHandler4
cryptlib.lib(rijndael_simd.obj) : error LNK2001: symbole externe non résolu __CxxFrameHandler4
cryptlib.lib(des.obj) : error LNK2001: symbole externe non résolu __CxxFrameHandler4
cryptlib.lib(gfpcrypt.obj) : error LNK2001: symbole externe non résolu __CxxFrameHandler4
cryptlib.lib(hmac.obj) : error LNK2001: symbole externe non résolu __CxxFrameHandler4
cryptlib.lib(gf2n.obj) : error LNK2001: symbole externe non résolu __CxxFrameHandler4
cryptlib.lib(ec2n.obj) : error LNK2001: symbole externe non résolu __CxxFrameHandler4
cryptlib.lib(modes.obj) : error LNK2001: symbole externe non résolu __CxxFrameHandler4
cryptlib.lib(oaep.obj) : error LNK2001: symbole externe non résolu __CxxFrameHandler4
cryptlib.lib(sha3.obj) : error LNK2001: symbole externe non résolu __CxxFrameHandler4
cryptlib.lib(pssr.obj) : error LNK2001: symbole externe non résolu __CxxFrameHandler4
cryptlib.lib(nbtheory.obj) : error LNK2001: symbole externe non résolu __CxxFrameHandler4
cryptlib.lib(sha_simd.obj) : error LNK2001: symbole externe non résolu __CxxFrameHandler4
cryptlib.lib(rijndael.obj) : error LNK2001: symbole externe non résolu __CxxFrameHandler4
cryptlib.lib(hrtimer.obj) : error LNK2001: symbole externe non résolu __CxxFrameHandler4
cryptlib.lib(base64.obj) : error LNK2001: symbole externe non résolu __CxxFrameHandler4
cryptlib.lib(files.obj) : error LNK2001: symbole externe non résolu __CxxFrameHandler4
cryptlib.lib(mqueue.obj) : error LNK2001: symbole externe non résolu __CxxFrameHandler4
cryptlib.lib(dll.obj) : error LNK2001: symbole externe non résolu __CxxFrameHandler4
cryptlib.lib(pubkey.obj) : error LNK2001: symbole externe non résolu __CxxFrameHandler4
cryptlib.lib(pkcspad.obj) : error LNK2001: symbole externe non résolu __CxxFrameHandler4
cryptlib.lib(asn.obj) : error LNK2001: symbole externe non résolu __CxxFrameHandler4
cryptlib.lib(rsa.obj) : error LNK2001: symbole externe non résolu __CxxFrameHandler4
cryptlib.lib(iterhash.obj) : error LNK2001: symbole externe non résolu __CxxFrameHandler4
cryptlib.lib(sha.obj) : error LNK2001: symbole externe non résolu __CxxFrameHandler4
cryptlib.lib(randpool.obj) : error LNK2001: symbole externe non résolu __CxxFrameHandler4
cryptlib.lib(osrng.obj) : error LNK2001: symbole externe non résolu __CxxFrameHandler4
cryptlib.lib(algparam.obj) : error LNK2001: symbole externe non résolu __CxxFrameHandler4
cryptlib.lib(queue.obj) : error LNK2001: symbole externe non résolu __CxxFrameHandler4
cryptlib.lib(basecode.obj) : error LNK2001: symbole externe non résolu __CxxFrameHandler4
cryptlib.lib(hex.obj) : error LNK2001: symbole externe non résolu __CxxFrameHandler4
cryptlib.lib(cryptlib.obj) : error LNK2001: symbole externe non résolu __CxxFrameHandler4
cryptlib.lib(misc.obj) : error LNK2001: symbole externe non résolu __CxxFrameHandler4
cryptlib.lib(filters.obj) : error LNK2001: symbole externe non résolu __CxxFrameHandler4
cryptlib.lib(integer.obj) : error LNK2001: symbole externe non résolu __CxxFrameHandler4
cryptlib.lib(keccak_core.obj) : error LNK2001: symbole externe non résolu __GSHandlerCheck_EH4
cryptlib.lib(ecp.obj) : error LNK2001: symbole externe non résolu __GSHandlerCheck_EH4
cryptlib.lib(rng.obj) : error LNK2001: symbole externe non résolu __GSHandlerCheck_EH4
cryptlib.lib(rijndael_simd.obj) : error LNK2001: symbole externe non résolu __GSHandlerCheck_EH4
cryptlib.lib(des.obj) : error LNK2001: symbole externe non résolu __GSHandlerCheck_EH4
cryptlib.lib(gfpcrypt.obj) : error LNK2001: symbole externe non résolu __GSHandlerCheck_EH4
cryptlib.lib(hmac.obj) : error LNK2001: symbole externe non résolu __GSHandlerCheck_EH4
cryptlib.lib(gf2n.obj) : error LNK2001: symbole externe non résolu __GSHandlerCheck_EH4
cryptlib.lib(ec2n.obj) : error LNK2001: symbole externe non résolu __GSHandlerCheck_EH4
cryptlib.lib(modes.obj) : error LNK2001: symbole externe non résolu __GSHandlerCheck_EH4
cryptlib.lib(oaep.obj) : error LNK2001: symbole externe non résolu __GSHandlerCheck_EH4
cryptlib.lib(sha3.obj) : error LNK2001: symbole externe non résolu __GSHandlerCheck_EH4
cryptlib.lib(pssr.obj) : error LNK2001: symbole externe non résolu __GSHandlerCheck_EH4
cryptlib.lib(nbtheory.obj) : error LNK2001: symbole externe non résolu __GSHandlerCheck_EH4
cryptlib.lib(sha_simd.obj) : error LNK2001: symbole externe non résolu __GSHandlerCheck_EH4
cryptlib.lib(rijndael.obj) : error LNK2001: symbole externe non résolu __GSHandlerCheck_EH4
cryptlib.lib(hrtimer.obj) : error LNK2001: symbole externe non résolu __GSHandlerCheck_EH4
cryptlib.lib(base64.obj) : error LNK2001: symbole externe non résolu __GSHandlerCheck_EH4
cryptlib.lib(files.obj) : error LNK2001: symbole externe non résolu __GSHandlerCheck_EH4
cryptlib.lib(mqueue.obj) : error LNK2001: symbole externe non résolu __GSHandlerCheck_EH4
cryptlib.lib(dll.obj) : error LNK2001: symbole externe non résolu __GSHandlerCheck_EH4
cryptlib.lib(pubkey.obj) : error LNK2001: symbole externe non résolu __GSHandlerCheck_EH4
cryptlib.lib(pkcspad.obj) : error LNK2001: symbole externe non résolu __GSHandlerCheck_EH4
cryptlib.lib(asn.obj) : error LNK2001: symbole externe non résolu __GSHandlerCheck_EH4
cryptlib.lib(rsa.obj) : error LNK2001: symbole externe non résolu __GSHandlerCheck_EH4
cryptlib.lib(iterhash.obj) : error LNK2001: symbole externe non résolu __GSHandlerCheck_EH4
cryptlib.lib(sha.obj) : error LNK2001: symbole externe non résolu __GSHandlerCheck_EH4
cryptlib.lib(randpool.obj) : error LNK2001: symbole externe non résolu __GSHandlerCheck_EH4
cryptlib.lib(osrng.obj) : error LNK2001: symbole externe non résolu __GSHandlerCheck_EH4
cryptlib.lib(algparam.obj) : error LNK2001: symbole externe non résolu __GSHandlerCheck_EH4
cryptlib.lib(queue.obj) : error LNK2001: symbole externe non résolu __GSHandlerCheck_EH4
cryptlib.lib(basecode.obj) : error LNK2001: symbole externe non résolu __GSHandlerCheck_EH4
cryptlib.lib(hex.obj) : error LNK2001: symbole externe non résolu __GSHandlerCheck_EH4
cryptlib.lib(cryptlib.obj) : error LNK2001: symbole externe non résolu __GSHandlerCheck_EH4
cryptlib.lib(misc.obj) : error LNK2001: symbole externe non résolu __GSHandlerCheck_EH4
cryptlib.lib(filters.obj) : error LNK2001: symbole externe non résolu __GSHandlerCheck_EH4
cryptlib.lib(integer.obj) : error LNK2001: symbole externe non résolu __GSHandlerCheck_EH4
cryptlib.lib(integer.obj) : error LNK2019: symbole externe non résolu __std_reverse_trivially_swappable_1 référencé dans la fonction "void __cdecl std::reverse<unsigned char *>(unsigned char * const,unsigned char * const)" (??$reverse@PEAE@std@@YAXQEAE0@Z)
debug\prxQWT.exe : fatal error LNK1120: 3 externes non résolus

似乎很多人都难以让它与 Qt 一起工作,而且似乎没有人有正确的方法来做到这一点。对了,我用的是Qt 5.12.0.

我终于解决了这个问题。这是因为我是用 MSVC2019 构建 Crypto++ 而 Qt 是用 MSVC2015 构建的。