Qt5 Static Build приводит к ошибке при загрузке плагина платформы "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" в этот список, но это не решило проблему. Что мне нужно сделать, чтобы запустить мое приложение?

9 ответов

Решение

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

opengl32.lib
Qt5PlatformSupport.lib
qwindows.lib

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

#include <QtPlugin>
Q_IMPORT_PLUGIN (QWindowsIntegrationPlugin);

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

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

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

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

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

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

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

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 и здесь.

РЕДАКТИРОВАТЬ: Извините, это не эффективно в статической сборке. Но я оставлю свой А здесь.

Хорошо, у меня была похожая проблема.

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

QT_DIRECTORY \ 5,2...\ Bin\windeployq.exe

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

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

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

Начиная с QT 5.9+ Qt5PlatformSupport.lib больше не доступен и был разделен на разные библиотеки. Для создания статической сборки под windows необходимо подключить следующие дополнительные библиотеки:

Qt5FontDatabaseSupport.lib
Qt5EventDispatcherSupport.lib
Qt5ThemeSupport.lib
Qt5PlatformCompositorSupport.lib
Qt5AccessibilitySupport.lib
Qt5WindowsUiAutomationSupport.lib
qwindows.lib

и статически загрузите плагин Windows:

#include <QtPlugin>
Q_IMPORT_PLUGIN (QWindowsIntegrationPlugin);

Решением является то, что если вы используете anaconda и python для создания графического интерфейса пользователя с использованием qt designer, перейдите в anaconda,pkgs,qt.xxx,library,plugins, а затем скопируйте папку платформы в папку сборки, в которой находится ваша программа.exe

У меня была такая же ошибка с VS2015 и версией Qt 5.9.3

Я решил ошибку, заменив Qt5Cored.dll и Qt5Core.dll(где исполняется мое приложение) на те же библиотеки DLL в каталоге Qt

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

Другие вопросы по тегам