带有 /MTd 的 QT 和 Crypto++
QT and Crypto++ with /MTd
我有两个带有 MSVC2013 32 位编译器的 QT 5.5 项目。第一个是 Qt 控制台应用程序,在 pro 文件中使用 crypto++ 和这两个:
QMAKE_CXXFLAGS_RELEASE += /MT
QMAKE_CXXFLAGS_DEBUG += /MTd
第二个是 Qt widgets 应用程序,它构建了基于对话框的 GUI。单独地,每个都成功启动,但也单独地在 pro 文件中添加相同的 GUI 项目,就像上面这些一样,给出了同样的旧错误:
qtmain.lib(qtmain_win.obj):-1: error: LNK2038: mismatch detected for
'RuntimeLibrary': value 'MD_DynamicRelease' doesn't match value
'MT_StaticRelease' in main.obj
有没有办法以某种方式将这两个项目联合起来?也请解释一下意思和区别:
multi-threaded DLL(/MD)
multi-threaded (/MT)
动态库和/MD、静态库和/MT之间的link是什么?
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
和 [=37= 重新使用了 DLL 导入配置]Dlltest
。一旦你理解了发生的事情,它就会有很多逻辑意义。
您link反对非 DLL 导入 Cryptlib
,它使用静态 linking。您需要针对动态 linked 运行时库切换到 linking。为此,请参阅 Compiling and Integrating Crypto++ into the Microsoft Visual C++ Environment。它很旧,但仍然适用。
您还应该避免任何路径中带有DLL_Output
的东西。尽管它使用适当的运行时库 linking,但您正试图 link 针对 DLL。 DLL 存在一个目的 - 作为 FIPS 140-2 验证模块的安全边界。通常不是你要找的,而且通常错 图书馆。
因为你还应该避免任何带有DLL_Output
的东西,打开配置管理器并删除任何相关的DLL(例如, DLL-Import Release
)。您还应该完全删除 Cryptdll
和 Dlltest
个简化您生活的项目。
我有两个带有 MSVC2013 32 位编译器的 QT 5.5 项目。第一个是 Qt 控制台应用程序,在 pro 文件中使用 crypto++ 和这两个:
QMAKE_CXXFLAGS_RELEASE += /MT
QMAKE_CXXFLAGS_DEBUG += /MTd
第二个是 Qt widgets 应用程序,它构建了基于对话框的 GUI。单独地,每个都成功启动,但也单独地在 pro 文件中添加相同的 GUI 项目,就像上面这些一样,给出了同样的旧错误:
qtmain.lib(qtmain_win.obj):-1: error: LNK2038: mismatch detected for 'RuntimeLibrary': value 'MD_DynamicRelease' doesn't match value 'MT_StaticRelease' in main.obj
有没有办法以某种方式将这两个项目联合起来?也请解释一下意思和区别:
multi-threaded DLL(/MD)
multi-threaded (/MT)
动态库和/MD、静态库和/MT之间的link是什么?
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
和 [=37= 重新使用了 DLL 导入配置]Dlltest
。一旦你理解了发生的事情,它就会有很多逻辑意义。
您link反对非 DLL 导入 Cryptlib
,它使用静态 linking。您需要针对动态 linked 运行时库切换到 linking。为此,请参阅 Compiling and Integrating Crypto++ into the Microsoft Visual C++ Environment。它很旧,但仍然适用。
您还应该避免任何路径中带有DLL_Output
的东西。尽管它使用适当的运行时库 linking,但您正试图 link 针对 DLL。 DLL 存在一个目的 - 作为 FIPS 140-2 验证模块的安全边界。通常不是你要找的,而且通常错 图书馆。
因为你还应该避免任何带有DLL_Output
的东西,打开配置管理器并删除任何相关的DLL(例如, DLL-Import Release
)。您还应该完全删除 Cryptdll
和 Dlltest
个简化您生活的项目。