Qt 应用程序无法加载自定义插件调试库

Posted

技术标签:

【中文标题】Qt 应用程序无法加载自定义插件调试库【英文标题】:Qt application fails to load custom plugin debug library 【发布时间】:2014-05-09 00:02:34 【问题描述】:

我的问题: 为什么我的测试应用程序在 Release 中运行时不加载我的插件 DLL 的 Debug (-d) 版本,而只加载 Release 版本?

背景: 我正在构建一个自定义 Qt Designer 插件 QDragableToolBox;我正在使用一个非常简单的 Qt 应用程序对其进行测试。我链接到我的插件库,如下面的 .pro 代码所示。

我的插件在发布模式下工作正常。当我尝试在 Debug 中运行时,测试应用程序无法通过插件的构造函数,并且简单地结束而没有警告或错误。我之前在 Debug/Release 库冲突中看到过这种情况,因此使用 Dependency Walker 检查可执行文件正在搜索哪个库。果然,它在寻找的是 Release 库,而不是附加 'd' 的 Debug 库。

我通过从 Debug DLL 的文件名中删除“d”进一步确认了这种情况。完成后,测试应用程序将完美运行。我知道在这种情况下它实际上是在加载调试库,因为我已经包含一个消息框弹出窗口,说明库类型(调试与发布)。

如果需要,我可以发布实际代码,但我认为它与问题无关,因为 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

【问题讨论】:

【参考方案1】:

文档清楚地表明插件必须使用与应用程序相同的设置来构建:http://qt-project.org/doc/qt-5/deployment-plugins.html

【讨论】:

以上是关于Qt 应用程序无法加载自定义插件调试库的主要内容,如果未能解决你的问题,请参考以下文章

DLL 仅在 qt 调试器中由应用程序加载,但不是独立加载

用于自定义调试构建的 CMake qt 输入库后缀

Qt Designer 和 PyQt5 自定义插件加载 TypeError

Qt Creator 2.7.1 和 Qt 4.8.4 无法远程调试库

未加载符号文件以在 Visual Studio 2012 中调试自定义项目

Qt编写自定义控件插件开放动态库dll使用(永久免费)