繁体   English   中英

带有/ MTd的QT和Crypto ++

[英]QT and Crypto++ with /MTd

我有两个QT 5.5项目与MSVC2013 32位编译器。 第一个是Qt控制台应用程序,并在pro文件中使用crypto ++和这两个:

QMAKE_CXXFLAGS_RELEASE += /MT
QMAKE_CXXFLAGS_DEBUG += /MTd

第二个是Qt小部件应用程序,其中是基于对话框的GUI构建。 单独地,每个都成功启动,但是单独的GUI项目在pro文件中具有相同的添加,如上所述是相同的旧错误:

qtmain.lib(qtmain_win.obj): - 1:错误:LNK2038:检测到'RuntimeLibrary'不匹配:值'MD_DynamicRelease'与main.obj中的值'MT_StaticRelease'不匹配

有办法以某种方式将这两个项目联合起来吗? 还请解释其含义和区别:

multi-threaded DLL(/MD)
multi-threaded (/MT)

动态库和/ MD之间以及静态和/ MT之间的链接是什么?

 qtmain.lib(qtmain_win.obj):-1: error: LNK2038: mismatch detected for 'RuntimeLibrary': value 'MD_DynamicRelease' doesn't match value 'MT_StaticRelease' in main.obj 

这是由于混合和匹配C / C ++运行时库。

Crypto ++有四个项目: CryptlibCryptestCryptdllDlltest 更复杂的是, CryptlibCryptest具有CryptdllDlltest重用的DLL-Import配置。 一旦了解了正在发生的事情,就会产生很多逻辑意义。

您正在链接非DLL-Import Cryptlib ,它使用静态链接。 您需要切换到动态链接的运行时库的链接。 为此,请参阅将Crypto ++编译和集成到Microsoft Visual C ++环境中 它的旧,但它仍然适用。

您还应该在其路径中避免使用DLL_Output 虽然它使用正确的运行时库链接,但您尝试链接DLL。 DLL存在于一个目的 - 作为FIPS 140-2验证模块的安全边界。 它通常不是你想要的,通常是错误的工作库。

因为您还应该避免使用DLL_Output ,打开配置管理器并删除任何与DLL相关的内容(例如, DLL-Import Release )。 您还应该完全删除CryptdllDlltest项目以简化您的生活。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM