QT and Crypto++ with /MTd

℡╲_俬逩灬. 提交于 2019-12-12 12:31:05

问题


I have two QT 5.5 projects with MSVC2013 32bit compiler. The first is Qt console application and is using crypto++ and this two in the pro file:

QMAKE_CXXFLAGS_RELEASE += /MT
QMAKE_CXXFLAGS_DEBUG += /MTd

The second is Qt widgets application where is dialog based GUI builded. Individually, each starts successfully, but also individually the GUI project with the same additions in the pro file like these above is givving the same old error:

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

Is there way to unite those two projects somehow? Also please explain the meaning and the difference between:

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

What is the link between dynamic libraries and /MD, and between static and /MT?


回答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

This is due to mixing and matching C/C++ runtime libraries.

Crypto++ has four projects: Cryptlib, Cryptest, Cryptdll and Dlltest. To further complicate matters, Cryptlib, Cryptest have DLL-Import configurations re-used by Cryptdll and Dlltest. Once you understand what's going on it makes a lot of logical sense.

You are linking against non-DLL-Import Cryptlib, and it uses static linking. You need to switch to linking against a dynamically linked runtime library. For that, see Compiling and Integrating Crypto++ into the Microsoft Visual C++ Environment. Its old, but it still applies.

You should also avoid anything with DLL_Output in its path. Though it uses proper runtime library linking, you are attempting to link against a DLL. The DLL exists for one purpose - as a security boundary for a FIPS 140-2 validated module. Its usually not what you are looking for, and usually the wrong library for the job.

Because you should also avoid anything with DLL_Output, open Configuration Manager and delete anything DLL related (for exampe, DLL-Import Release). You should also completely delete the Cryptdll and Dlltest projects to simplify your life.



来源:https://stackoverflow.com/questions/33254054/qt-and-crypto-with-mtd

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!