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.