我在Qt Creator 6.0.2中使用Qt 5.15.2。我有一个使用.lib文件的程序,该文件是在调试(_ITERATOR_DEBUG_LEVEL = 0)和发布(_ITERATOR_DEBUG_LEVEL = 2)版本中构建的。我可以构建我的程序的调试版本没有问题,但是当我试图构建发布时,我得到这个错误:
LNK2038:检测到'_ITERATOR_DEBUG_LEVEL'不匹配:值'2'不匹配值'0'在button.obj
我也得到
LNK2038:检测到'RuntimeLibrary'不匹配:值'MDd_DynamicDebug'不匹配值' md_dynamicrelease '在button.obj
我知道我的。obj文件以某种方式链接到ITERATOR_DEBUG_LEVEL = 0和MDd,但我不知道如何改变Qt项目上的这些参数。
更新.pro文件:
QT += core gui qml
QT += serialport
QT += multimedia
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
CONFIG += c++11
CONFIG += console
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000
SOURCES +=
button.cpp
checkbox.cpp
combolist.cpp
controlpanel.cpp
expressionevaluator.cpp
filter.cpp
globals.cpp
logicaloperator.cpp
main.cpp
mainwindow.cpp
neurobit.cpp
numericdisplay.cpp
oscilloscope.cpp
pnwiz.cpp
pnwiz_devicethread.cpp
pnwiz_ui.cpp
pnwizconfigwindow.cpp
pnwizconnectionmenu.cpp
pnwizelectrocapmenu.cpp
score.cpp
shadow.cpp
shadowpanel.cpp
shadowvolume.cpp
shadowwindow.cpp
threshold.cpp
thresholdbar.cpp
timetransform.cpp
variablefilter.cpp
HEADERS +=
button.h
checkbox.h
combolist.h
controlpanel.h
expressionevaluator.h
filter.h
globals.h
logicaloperator.h
mainwindow.h
neurobit.h
numericdisplay.h
oscilloscope.h
pnwiz.h
pnwiz_devicethread.h
pnwiz_ui.h
pnwizconfigwindow.h
pnwizconnectionmenu.h
pnwizelectrocapmenu.h
score.h
shadow.h
shadowpanel.h
shadowvolume.h
shadowwindow.h
threshold.h
thresholdbar.h
timetransform.h
variablefilter.h
FORMS +=
button.ui
checkbox.ui
combolist.ui
controlpanel.ui
mainwindow.ui
numericdisplay.ui
pnwiz_ui.ui
pnwizconfigwindow.ui
pnwizconnectionmenu.ui
pnwizelectrocapmenu.ui
shadowpanel.ui
shadowwindow.ui
threshold.ui
thresholdbar.ui
variablefilter.ui
# Default rules for deployment.
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target
RESOURCES +=
Images.qrc
Sounds.qrc
LIBS += -lkernel32 -luser32 -lgdi32 -lwinspool -lcomdlg32 -ladvapi32 -lshell32 -lole32 -loleaut32 -luuid -lodbc32 -lodbccp32
unix|win32: LIBS += -L$$PWD/../Filtros01/Filtros01-Output/Products/x64Debug/ -lDSPFilters
INCLUDEPATH += $$PWD/DSPFilters_original/include
DEPENDPATH += $$PWD/DSPFilters_original/include
下面是qmake调用:
E:/Qt/5.15.2/msvc2019_64/bin/qmake.exe E:C++QtQWiz_4QWiz_4.pro -spec win32-msvc "CONFIG+=qtquickcompiler" && E:/Qt/Tools/QtCreator/bin/jom/jom.exe qmake_all
更新2
我尝试了Evgene提出的解决方案,现在我得到了一个不同的错误信息:
LNK2038:检测到'RuntimeLibrary'不匹配:值'MT_StaticRelease'不匹配值'MD_DynamicRelease'在button.obj
有什么想法可以纠正吗?
3
更新好的,我能够通过在MD模式下发布库来解决这个问题。现在我可以在发布模式下构建了。谢谢你的帮助!
问题就在这里:
unix|win32: LIBS += -L$$PWD/../Filtros01/Filtros01-Output/Products/x64Debug/ -lDSPFilters
如您所见,您总是使用x64Debug
库构建。试试这样写
CONFIG(debug, debug|release) {
unix|win32: LIBS += -L$$PWD/../Filtros01/Filtros01-Output/Products/x64Debug/
}
else {
unix|win32: LIBS += -L$$PWD/../Filtros01/Filtros01-Output/Products/x64Release/
}
unix|win32: LIBS += -lDSPFilters
当然要确保x64Release
路径存在,并在需要时替换它。