Qt5 Static Build yields Не удалось загрузить плагин "windows"

Я пишу приложение Qt в Windows, используя Visual Studio 2012. Использование надстройки Qt и настраиваемого статического дистрибутива Qt 5.0.2. Я запускаю ужасную ошибку "Failed to load platform plugin windows" всякий раз, когда запускаю приложение. Я добавил к вводу компоновщика следующее:

imm32.lib
winmm.lib
Ws2_32.lib
qtmaind.lib
Qt5Cored.lib
Qt5Guid.lib
Qt5Widgetsd.lib

Сначала я подумал, что, возможно, я должен добавить "qwindowsd.lib" в этот список, но это не устранило проблему. Что мне нужно сделать, чтобы запустить мое приложение?

Ответ 1

Я решил это. Благодаря этому я смог заставить все работать. Я добавил следующие библиотеки:

opengl32.lib
Qt5PlatformSupport.lib
qwindows.lib

Я также добавил в свой код следующее:

#include <QtPlugin>
Q_IMPORT_PLUGIN (QWindowsIntegrationPlugin);

Ответ 2

Только для динамической сборки: убедитесь, что вы переместите qwindows.dll в следующий каталог:

yourapp.exe
Qt5Core.dll
...
platforms/qwindows.dll
...

Обратите внимание, что каталог плагинов отсутствует! Вы поместите все необходимые папки из QT_BASE/.../плагинов/* непосредственно вместе со своими двоичными файлами. BTW: Мне не нужен libEGL.dll, но мое приложение почти не имеет графического интерфейса.

Мой источник: http://qt-project.org/forums/viewthread/27056/#122588

Ответ 3

У меня была такая же ошибка с версией Qt MinGW (не статичной): "Не удалось загрузить окна плагинов платформы".

Решением для меня было добавить библиотеки DLL libEGL.dll и libEGLd.dll.

Ответ 4

Альтернативой является копирование каталога qtbase/plugins/platforms в каталоги Debug/Release, оставляя только qwindowsd.dll или qwindows.dll, если это необходимо.

Ответ 5

Вы также можете создать переменную окружения:

QT_QPA_PLATFORM_PLUGIN_PATH=<QT_BASE>\plugins\platforms

который в моем случае становится: QT_QPA_PLATFORM_PLUGIN_PATH=f:\Qt\5\5.4\msvc2013_opengl\plugins\platforms

Таким образом, избегайте установки/копирования qwindows.dll во время разработки (чтобы сохранить дисковое пространство!?).

Это решение было также упомянуто на GitHub и здесь.

EDIT: Извините, это не эффективно для статической сборки. Но я оставлю свой A здесь.

Ответ 6

Хорошо, у меня была аналогичная проблема.

Я узнал, что QT 5.2+ имеет windeployq.exe

QT_DIRECTORY\5.2...\Bin\windeployq.exe

Используйте его с каталогом вашего проекта (где находится .exe вашего приложения). И вуаля! Автоматически связать все и готово к развертыванию!

Он получит библиотеки DLL, плагины и т.д.... автоматически!

Ответ 7

Я именно этот вопрос. Решение состоит в проверке вывода Qt в Debug. Это окно сообщает вам все DLL файлы, которые он загружает. Это те, которые вам могут понадобиться в вашей папке exe распространения.