我有两个带有 MSVC2013 32 位编译器的 QT 5.5 项目。第一个是 Qt 控制台应用程序,正在使用 crypto++,这两个在 pro 文件中:
QMAKE_CXXFLAGS_RELEASE += /MT
QMAKE_CXXFLAGS_DEBUG += /MTd
第二个是 Qt 小部件应用程序,其中构建了基于对话框的 GUI。单独地,每个都成功启动,但单独地,在 pro 文件中添加相同内容的 GUI 项目(如上面的这些)也给出了相同的旧错误:
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
and Dlltest
。让事情变得更加复杂的是,Cryptlib
, Cryptest
重用 DLL 导入配置Cryptdll
and Dlltest
。一旦你理解了发生了什么,它就具有了很多逻辑意义。
您正在链接非 DLL 导入Cryptlib
,并且它使用静态链接。您需要切换到针对动态链接的运行时库的链接。为此,请参阅编译 Crypto++ 并将其集成到 Microsoft Visual C++ 环境中 http://www.codeproject.com/Articles/16388/Compiling-and-Integrating-Crypto-into-the-Microsof。它很旧,但仍然适用。
你也应该avoid任何与DLL_Output
在它的路径中。尽管它使用正确的运行时库链接,但您正在尝试链接 DLL。该 DLL 的存在只有一个目的 - 作为 FIPS 140-2 验证模块的安全边界。通常是not您正在寻找什么,通常是wrong图书馆的工作。
因为你也应该avoid任何与DLL_Output
,打开配置管理器并删除任何与 DLL 相关的内容(例如,DLL-Import Release
)。您还应该完全删除Cryptdll
and Dlltest
简化您的生活的项目。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)