带有/ MTd的QT和Crypto ++

时间:2015-10-21 08:08:23

标签: c++ qt user-interface crypto++

我有两个带有MSVC2013 32位编译器的QT 5.5项目。第一个是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之间的链接是什么?

1 个答案:

答案 0 :(得分:1)

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 具有DLL导入配置 - 由 Cryptdll Dlltest 使用。一旦你理解了它的作用,它就具有很大的逻辑意义。

您正在链接非DLL-Import Cryptlib ,并且它使用静态链接。您需要切换到动态链接的运行时库的链接。为此,请参阅Compiling and Integrating Crypto++ into the Microsoft Visual C++ Environment。它很旧,但它仍然适用。

您还应 避免 路径中包含DLL_Output的任何内容。虽然它使用正确的运行时库链接,但您尝试链接DLL。 DLL存在于一个目的 - 作为FIPS 140-2验证模块的安全边界。它通常 您正在寻找的内容,通常是 错误的 库。

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