C++ Qt应用程序找不到第三方DLL并崩溃

C++ Qt应用程序找不到第三方DLL并崩溃,c++,qt,C++,Qt,我正在尝试在QT中构建一个使用libmodbus库的应用程序。我正在使用Mingw5.3(Windows7)。应用程序生成时不会出错,但在尝试运行时会崩溃。调试消息显示: 启动期间,程序退出,代码为0xc0000135 如果双击创建的可执行文件,则会出现一个错误,显示: 缺少libmodbus-5.dll 从我的电脑 Libmodbus是用同一个编译器构建的。include文件位于./../codelibrary/MinGW63/libmodbus master/src中,链接器文件位于./..

我正在尝试在QT中构建一个使用libmodbus库的应用程序。我正在使用Mingw5.3(Windows7)。应用程序生成时不会出错,但在尝试运行时会崩溃。调试消息显示:

启动期间,程序退出,代码为0xc0000135

如果双击创建的可执行文件,则会出现一个错误,显示:

缺少libmodbus-5.dll

从我的电脑

Libmodbus是用同一个编译器构建的。include文件位于
./../codelibrary/MinGW63/libmodbus master/src
中,链接器文件位于
./../codelibrary/QtMinGW53/libmodbus master/src/.libs
.libs
文件夹既有
libmodbus.dll.a
又有
libmodbus-5.dll

如果使用Qt的第三方库向导添加此库,则在
.pro
文件中会得到以下内容:

win32: LIBS += -L$$PWD/../../codelibrary/QtMinGW53/libmodbus-master/src/.libs/ -llibmodbus.dll

INCLUDEPATH += $$PWD/../../codelibrary/QtMinGW53/libmodbus-master/src
DEPENDPATH += $$PWD/../../codelibrary/QtMinGW53/libmodbus-master/src

win32:!win32-g++: PRE_TARGETDEPS += $$PWD/../../codelibrary/QtMinGW53/libmodbus-master/src/.libs/libmodbus.dll.lib
else:win32-g++: PRE_TARGETDEPS += $$PWD/../../codelibrary/QtMinGW53/libmodbus-master/src/.libs/liblibmodbus.dll.a
这给了我一个错误:

-1:错误:没有规则使“debug\QTRosemount.exe”需要目标“../../codelibrary/MinGW63/libmodbus master/src/.libs/liblibmodbus.dll.a”。停下来

然后我尝试将
.pro
文件更改为:

LIBS += -L$$PWD/../../codelibrary/QtMinGW53/libmodbus-master/src/.libs/libmodbus-5.dll

INCLUDEPATH += $$PWD/../../codelibrary/QtMinGW53/libmodbus-master/src
DEPENDPATH += $$PWD/../../codelibrary/QtMinGW53/libmodbus-master/src

PRE_TARGETDEPS += $$PWD/../../codelibrary/QtMinGW53/libmodbus-master/src/.libs/libmodbus.dll.a
此时,它将无错误生成,并立即崩溃,代码为0xc0000135,缺少
libmodbus-5.dll
。我已经尝试了许多不同的
.pro
路径,它们都会出现相同的错误

注意:我已经能够使用这个库在代码块中运行控制台应用程序,但不确定我在使用Qt时遇到了什么


如何修复此问题?

您可以使用安装集并将其附加到安装列表中,如下所示:

documentation.path = /usr/local/program/doc
documentation.files = docs/*
INSTALLS += documentation

为方便起见,您也可以使用。现在您有了一些选项,您可以在stackoverflow中找到更多信息,例如。

或者,我发现DEPENDPATH不正确。我在libmodbus中有一个文件夹需要指向:

DEPENDPATH += $$PWD/../../codelibrary/QtMinGW53/libmodbus-master/src/.deps

该程序使用此更改正确编译

我希望不会误导您,但是,如果手动将DLL复制到可执行目录修复了可执行文件崩溃(意味着所有链接/构建都是正确的),您是否考虑过向添加安装或QMAKE_PRE_链接?手动复制DLL,谢谢!在使用第三方库时,添加安装或QMAKE_PRE_LINK参数是常见的做法吗?请注意,我是自以为是!QMake在被设置为已弃用。这使得许多工程师转向CMake,这得到了QtCreator的良好支持。我工作过的组织最好的Qt项目是使用INSTALL而不是QMAKE_PRE_链接,如图所示。此外,我还看到有人使用它来提高.pro文件的可读性,并促进在各种项目中重新包含通用的第三方库。