[英]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 ++有四个项目: Cryptlib
, Cryptest
, Cryptdll
和Dlltest
。 更复杂的是, Cryptlib
, Cryptest
具有Cryptdll
和Dlltest
重用的DLL-Import配置。 一旦了解了正在发生的事情,就会产生很多逻辑意义。
您正在链接非DLL-Import Cryptlib
,它使用静态链接。 您需要切换到动态链接的运行时库的链接。 为此,请参阅将Crypto ++编译和集成到Microsoft Visual C ++环境中 。 它的旧,但它仍然适用。
您还应该在其路径中避免使用DLL_Output
。 虽然它使用正确的运行时库链接,但您尝试链接DLL。 DLL存在于一个目的 - 作为FIPS 140-2验证模块的安全边界。 它通常不是你想要的,通常是错误的工作库。
因为您还应该避免使用DLL_Output
,打开配置管理器并删除任何与DLL相关的内容(例如, DLL-Import Release
)。 您还应该完全删除Cryptdll
和Dlltest
项目以简化您的生活。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.