Развертывание файла Qt dll - не удается найти плагин Windows, хотя существует платформа/qwindows.dll, поэтому libEGL и libGLES

Я создал свое приложение как обычный исполняемый файл и запустил на нем windeployqt. Я получил длинный список файлов в папке с exe.

files:
./
D3Dcompiler_47.dll
Qt5Core.dll
Qt5Gui.dll
Qt5Svg.dll
Qt5Widgets.dll
WLedPlugin.exe
accessible
files.txt
iconengines
icudt52.dll
icuin52.dll
icuuc52.dll
imageformats
libEGL.dll
libGLESv2.dll
platforms
qt_cs.qm
qt_de.qm
qt_fi.qm
qt_hu.qm
qt_it.qm
qt_ja.qm
qt_ru.qm
qt_sk.qm
qt_uk.qm

./accessible:
qtaccessiblewidgets.dll

./iconengines:
qsvgicon.dll

./imageformats:
qdds.dll
qgif.dll
qicns.dll
qico.dll
qjp2.dll
qjpeg.dll
qmng.dll
qsvg.dll
qtga.dll
qtiff.dll
qwbmp.dll
qwebp.dll

./platforms:
qwindows.dll

затем я скомпилировал приложение как dll и поместил его в папку с соответствующей программой. (Я разрабатываю плагин для Keil IDE). DLL видится хорошо, но когда часть кода с QApplication запускается, то не может найти виндовый плагин.

Итак, как вы видите, qwindows.dll находится в соответствующей папке, как и libEGL и libGLESv2, и он по-прежнему не видит плагин Windows.

Я использую компилятор msvc x86 и версию Qt 5.3.


Найден какой-то обходной путь -> я просто отключил msvc и вместо этого использовал mingw. Это просто сработало.


person DawidPi    schedule 09.04.2015    source источник
comment
Вам следует прочитать официальную документацию по развертыванию приложений Qt: doc.qt.io/qt- 5/windows-deployment.html. Вы забыли добавить ./platforms/qwindows.dll   -  person Dmitry Sazonov    schedule 09.04.2015
comment
Нет, я не делал. qwindows.dll находится в папке ./platforms, как показано в верхнем листинге.   -  person DawidPi    schedule 09.04.2015
comment
любая помощь приветствуется. Если у меня получится, я опубликую решение. Спасибо   -  person DawidPi    schedule 09.04.2015


Ответы (2)


Вам нужно разместить qt.conf рядом с вашим .exe или в ресурсах :qt/etc/qt.conf

[Paths]
Prefix=.
Plugins=.
person Dmitry Sazonov    schedule 09.04.2015
comment
@SaZ-› К сожалению, не работает. Я также пытался жестко запрограммировать его с помощью qApp->addLibraryPath() с аргументом QDir::currentDirectory() и qApp->applicationDirPath, и все равно ничего. Я не знаю, действительно ли это имеет значение, но QApplication находится в отдельном потоке (конечно, это единственный QApplication во всем приложении). и я также обманул QApplication со значениями argc и argv. Я также не знаю, имеет ли это значение, но я развертываю не файл *.exe, а файл *.dll - person DawidPi; 09.04.2015
comment
Можете ли вы создать образец? .dll с QApplication + модули + qt.conf. стараюсь смотреть. - person Dmitry Sazonov; 10.04.2015
comment
Что вы подразумеваете под созданием образца? Вам нужен исходный код или бинарники? Извините, я просто не понимаю :) Спасибо за вашу помощь :) - person DawidPi; 10.04.2015
comment
извините, это заняло у меня так много времени. github.com/DawidPi/MKD51-Simulator вот код, зависимости находятся в релизе, и qt.conf: [Пути] Префикс =. Плагины=. Теперь это больше похоже на то, что это работает на моей машине, а на других нет. Вот так после смены компилятора на mingw 4.8.2. Сообщение об ошибке такое же, как у меня с компилятором msvc. Не знаю, что случилось. - person DawidPi; 13.04.2015
comment
QApplication находится в файле Controller-›sources-›guistart.cpp я забыл извините - person DawidPi; 13.04.2015

Хорошо, я думаю, теперь я знаю немного больше, в чем была проблема.

У меня была папка с приложением Keil и папка с моим плагином dll. Windows проверяет наличие зависимостей вызываемой dll в приложении, вызывающем каталог dll, в первую очередь, а не в каталоге dll. Каталог Dll находится в нижнем положении.

Конечно рано или поздно виндовс должен наконец добраться до папки с dll, но на некоторых машинах этого не произошло. Перемещение зависимостей из каталога DLL в каталог приложения помогло и в настоящее время работает хорошо. Всем спасибо за помощь! :)

person DawidPi    schedule 14.04.2015