【发布时间】:2016-05-27 16:41:15
【问题描述】:
我正在尝试使用 Visual Studio 2013 为 Qt 构建 Crypto++ 5.6.2,但它会产生错误。这是我到目前为止所做的。
- 已下载Crypto++ 5.6.2
- 已下载 vs2010.zip 和 vs2010-dynamic.zip 并覆盖现有项目文件。
该页面上提到了 vs2010-dynamic.zip,但 ZIP 仅包含 VS2005 的 cryptest.sln。只是一个文件。但无论如何,我使用了文件:
Visual Studio 2010 及更高版本的预转换解决方案文件、项目文件和过滤器的存档。"
然后:
在MSVC2013中打开
cryptest.sln,为每个项目设置“多线程DLL(/MD)”(项目-->属性-->C/C++-->代码生成-->运行库--> /MD)Build --> 'Batch Build' --> 检查 cryptdll、cryptest、cryptlib、dlltest (Release|win32) --> Build
它在DLL_Output 目录中生成了一个DLL 和LIB。然后我:
- 将 DLL 移至 Qt 可执行文件所在的目录。
- 在 Qt 中,我在
test.pro中添加了两行:INCLUDEPATH += "../extern/msvc2013/cryptopp562/include"LIBS += -L"..\extern\msvc2013\cryptopp562\include\cryptopp\Win32\DLL_Output\Release" -lcryptopp
但在 Qt 中,出现以下错误:
mainwindow.obj:-1: error: LNK2001: unresolved external symbol "public: virtual unsigned __int64 __thiscall CryptoPP::ThreadUserTimer::GetCurrentTimerValue(void)" (?GetCurrentTimerValue@ThreadUserTimer@CryptoPP@@UAE_KXZ)
mainwindow.obj:-1: error: LNK2001: unresolved external symbol "public: virtual unsigned __int64 __thiscall CryptoPP::ThreadUserTimer::TicksPerSecond(void)" (?TicksPerSecond@ThreadUserTimer@CryptoPP@@UAE_KXZ)
mainwindow.obj:-1: error: LNK2019: unresolved external symbol "class CryptoPP::NameValuePairs const & const CryptoPP::g_nullNameValuePairs" (?g_nullNameValuePairs@CryptoPP@@3ABVNameValuePairs@1@B) referenced in function "public: __thiscall CryptoPP::HMAC::HMAC(unsigned char const *,unsigned int)" (??0?$HMAC@VSHA256@CryptoPP@@@CryptoPP@@QAE@PBEI@Z)
release\user_account_registration.exe:-1: error: LNK1120: 3 unresolved externals
您知道为什么我会收到这些错误吗?
非常感谢任何帮助/评论/见解。
【问题讨论】:
-
"... 但是 vs2010-dynamic.zip 仅包含 VS2005 的 cryptest.sln..." - Arg... 听起来有些问题。给我几个小时,我会把它修好。顺便说一句,您应该只需要
vs2010.zip或vs2010-dynamic.zip。你不应该两者都需要。 -
其他几项...不要使用 DLL,除非您有硬性要求。另请参阅 Crypto++ wiki 上的 FIPS DLL。当事情按预期工作时,如何将 Crypto++ 与 QT 集成:Integrate Crypto++ code to Qt Application In Linux 和 Adding Crypto++ .lib file to Qt project。
-
@jww 首先,非常感谢您的 cmets 和链接。 “你不应该两者都需要” ==> 我猜是这样。 :) 修复后让我用 vs2010-dynamic.zip 再试一次。谢谢。
-
上传了一个新的
vs2010-dynamic.zip。项目文件可能会引用一些您没有的源文件,因为它是由最新的稳定源构建的。如果源文件丢失,则只需将其从项目文件中删除。您还应该考虑使用 Crypto++ 5.6.3 而不是 5.6.2。或者更好的是,使用来自Wei Dai's GitHub 的 ZIP。 Master是稳定的,不是实验性的;并且有 ChaCha、BLAKE2 等尚未在发行版 ZIP 中提供。对 Windows Phone、Windows 应用商店和通用 Windows 平台 (UWP) 也有更好的支持。 -
顺便说一下,ZIP 还包括我用来从
vs2010.zip构建vs2010-dynamic.zip的脚本。如果您发现任何问题,请指出它们或file a bug report。具有讽刺意味的是,它是一个在 Linux 和 OS X 上运行的 Bash 脚本,因为命令行工具要好一些。