我的问题:
为什么我的测试应用程序在Release中运行时,不加载我的插件DLL的Debug(-d)版本而只加载Release版本?
背景:
我正在构建一个自定义的Qt Designer插件,QDragableToolBox;我正在用一个非常简单的Qt应用程序测试它。我链接到我的插件库,如下面的.pro代码所示。
我的插件在发布模式下正常运行。当我尝试在Debug中运行时,测试应用程序无法通过插件的构造函数,只是在没有警告或错误的情况下结束。我之前已经看过Debug / Release库冲突,因此使用Dependency Walker来检查可执行文件正在搜索哪个库。果然,它正在寻找Release库,而不是附加'd'的调试库。
通过从调试DLL的文件名中删除'd',我进一步确认了这种情况。完成后,测试应用程序运行完美。我知道它实际上是在这种情况下加载Debug库,因为我已经包含了一个消息框弹出窗口,说明了库类型(Debug vs. Release)。
如果需要,我可以发布实际代码,但我不认为它与问题有关,因为Release工作正常。
谢谢。
以下是我的项目文件:
插件库.pro:
QT += widgets designer
QMAKE_LFLAGS += /INCREMENTAL:NO
TARGET = $$qtLibraryTarget($$TARGET)
TEMPLATE = lib
CONFIG += plugin
CONFIG += debug_and_release
target.path = $$[QT_INSTALL_PLUGINS]/designer
INSTALLS += target
HEADERS = qdragabletoolbox.h \
qdragabletoolboxplugin.h \
qdragabletoolboxextensionfactory.h \
qdragabletoolboxcontainerextension.h
SOURCES = qdragabletoolbox.cpp \
qdragabletoolboxplugin.cpp \
qdragabletoolboxextensionfactory.cpp \
qdragabletoolboxcontainerextension.cpp
RESOURCES += qdragabletoolbox.qrc
OTHER_FILES += qdragabletoolbox.json
测试可执行文件.pro:
QT += core gui
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
QMAKE_LFLAGS += /INCREMENTAL:NO
TARGET = QDesignerPluginTester
TEMPLATE = app
CONFIG += debug_and_release
LIBS += -LF:/Custom_Plugins/QDragableToolBox/output -lQDragableToolBox
LIBS += -LF:/Custom_Plugins/QMultiPageWidget/output -lQMultiPageWidget
LIBS += -LF:/Custom_Plugins/QLED/output -lQLED
SOURCES += main.cpp\
testwidget.cpp
HEADERS += testwidget.h
FORMS += \
testwidget.ui