我有一个使用Visual Studio构建的静态库作为静态库(使用“运行时库:多线程调试(/ MTd)构建)”。但是,当我在QT项目中使用它时,它表示不匹配。
xerces-c_static_3d.lib(XMLString.obj):-1: error: LNK2038: mismatch detected for 'RuntimeLibrary': value 'MTd_StaticDebug' doesn't match value 'MDd_DynamicDebug' in helloworld.obj
相关的Makefile.Debug
如下所示,如您所见,QT Creator使用-MDd
创建了CFLAGS和CXXFLAGS。显然造成了不匹配。
CC = cl
CXX = cl
DEFINES = -DUNICODE -DWIN32 -DQT_DEPRECATED_WARNINGS -DQT_QML_DEBUG -DQT_CORE_LIB
CFLAGS = -nologo -Zc:wchar_t -FS -Zc:strictStrings -Zi -MDd -W3 -w44456 -w44457 -w44458 /Fddebug\testbed.vc.pdb $(DEFINES)
CXXFLAGS = -nologo -Zc:wchar_t -FS -Zc:rvalueCast -Zc:inline -Zc:strictStrings -Zc:throwingNew -Zi -MDd -W3 -w34100 -w34189 -w44996 -w44456 -w44457 -w44458 -wd4577 -wd4467 -EHsc /Fddebug\testbed.vc.pdb $(DEFINES)
INCPATH = -I..\testbed -I. -I..\testbed\libxsd -I..\..\..\..\Qt\5.9\msvc2015\include -I..\..\..\..\Qt\5.9\msvc2015\include\QtCore -Idebug -I..\..\..\..\Qt\5.9\msvc2015\mkspecs\win32-msvc
LINKER = link
LFLAGS = /NOLOGO /DYNAMICBASE /NXCOMPAT /DEBUG /SUBSYSTEM:CONSOLE "/MANIFESTDEPENDENCY:type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' publicKeyToken='6595b64144ccf1df' language='*' processorArchitecture='*'"
LIBS = C:\Users\intellitix\Documents\testbed\libxsd\lib\xerces-c_static_3d.lib /LIBPATH:C:\Qt\5.9\msvc2015\lib C:\Qt\5.9\msvc2015\lib\Qt5Cored.lib
QMAKE = C:\Qt\5.9\msvc2015\bin\qmake.exe
摘录自testbed.pro
如您所见,库是完整路径,而不是带有-L和-l的CMAKE样式(在通过Visual Studio链接win32库时会出现问题)
win32:CONFIG(release, debug|release): LIBS += $$PWD/libxsd/lib/xerces-c_static_3.lib
else:win32:CONFIG(debug, debug|release): LIBS += $$PWD/libxsd/lib/xerces-c_static_3d.lib
else:unix: LIBS += $$PWD/libxsd/lib/xerces-c_static_3.lib
INCLUDEPATH += $$PWD/libxsd
DEPENDPATH += $$PWD/libxsd
win32-g++:CONFIG(release, debug|release): PRE_TARGETDEPS += $$PWD/libxsd/lib/libxerces-c_static_3.a
else:win32-g++:CONFIG(debug, debug|release): PRE_TARGETDEPS += $$PWD/libxsd/lib/libxerces-c_static_3d.a
else:win32:!win32-g++:CONFIG(release, debug|release): PRE_TARGETDEPS += $$PWD/libxsd/lib/xerces-c_static_3.lib
else:win32:!win32-g++:CONFIG(debug, debug|release): PRE_TARGETDEPS += $$PWD/libxsd/lib/xerces-c_static_3d.lib
else:unix: PRE_TARGETDEPS += $$PWD/libxsd/lib/libxerces-c_static_3.a
所以我的问题是,
-即使要求lib进行静态链接,但为什么QT Creator抱怨它与-MDd
不兼容,后者是动态链接。 (我曾尝试将标志放入.pro
文件中,但被覆盖了)
QMAKE_CFLAGS += /MTd
QMAKE_CXXFLAGS += /MTd
({cl : Command line warning D9025 : overriding '/MTd' with '/MDd'
)
-尝试手动更改CFLAGS
中的CXXFLAGS
和Makefile.Debug
,但是由于QMake现在尝试静态链接每个从属库,因此造成了更多问题。在QT Creator中,没有办法仅静态链接一个库,而将其他所有库动态链接吗?
使用- VS2017, QT Creator 4.8, QT 5.9, msvc2015 32位, xerces-c-3.1.4
顺便说一句,如果链接到动态库(带有lib和dll),则一切正常。