Приложение Qt не может найти стороннюю DLL и вылетает - PullRequest
0 голосов
/ 19 сентября 2018

Я пытаюсь создать приложение в QT, которое использует библиотеку libmodbus.Я использую MinGW 5.3 (Windows 7).Приложение будет скомпилировано без ошибок, но вылетает при попытке запуска.Отладочное сообщение гласит:

Во время запуска программы выход с кодом 0xc0000135

Если дважды щелкнуть созданный исполняемый файл, возникает ошибка:

libmodbus-5.dll отсутствует

на моем компьютере.

Libmodbus был собран с тем же компилятором.Включаемые файлы находятся в ../../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: ошибка: нет правила для создания цели '../../codelibrary/MinGW63/libmodbus-master/src/.libs/liblibmodbus.dll.a ', необходимый для' debug \ QTRosemount.exe '.Стоп.

Затем я попытался изменить файл .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, которые получают ту же ошибку.

Примечание: Я смог запустить консольные приложения в Codeblocks с этой библиотекой, не уверен, что ясталкиваюсь с Qt.

Как это исправить?

Ответы [ 2 ]

0 голосов
/ 19 сентября 2018

Кроме того, я обнаружил, что DEPENDPATH был неправильным.У меня есть папка в libmodbus, на которую нужно указать:

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

Программа корректно компилируется с этим измененным

0 голосов
/ 19 сентября 2018

вы можете использовать INSTALL SET и добавить его в список INSTALL, как показано в документации QT и показано ниже:

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

Для удобства вы также можете использовать QMAKE_PRE_LINK .Теперь, когда у вас есть некоторые опции, вы можете найти дополнительную информацию в stackoverflow, например, в сообщениях, подобных этой .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...