Статически связанное приложение с Qt выдает ошибку: не удалось загрузить плагин платформы & quot; windows & quot;

Я статически построил Qt 5.0.1 в VS 2010 под Windows 7 x64. Параметры конфигурации были

configure -debug-and-release -opensource -confirm-license -platform win32-msvc2010 -nomake examples -nomake tests -no-webkit -static

и я выполнил сборку с помощью jom со следующими параметрами:

jom -j 4

Процесс сборки прошел успешно, и я могу найти все библиотеки и статически связать свое приложение с Qt. Теперь проблема в том, что при попытке запустить приложение выдает ошибку

Module: 5.0.1
File: kernel\qguiapplication.cpp
Line: 781
"Failed to load platform plugin "windows". Available platforms are:"

Но ниже этой ошибки не отображаются какие-либо платформы. Я столкнулся с той же ошибкой при динамическом соединении с Qt. Я избавился от этого, поместив DLL-файлы зависимостей (qt5core.dll, qt5gui.dll и т. Д.) В один и тот же каталог моего exe-файла. Но я не могу найти способ на этот раз.

После статической сборки Qt библиотеки DLL в папке plugins / платформы / исчезли, и они были заменены библиотеками. Я также пытался статически связать с qwindows.lib, но безрезультатно.

Любая идея?
С уважением.

9

Решение

Чтобы проверить, какие библиотеки DLL необходимы для развертывания приложения в Windows, используйте Walker-зависимость (http://www.dependencywalker.com/).

Согласно странице документации Qt для Windows — Развертывание некоторые DLL необходимы для развертывания приложения Qt на платформах Windows:

  • qwindows.dll
  • icudtXX.dll
  • icuinXX.dll
  • icuucXX.dll
  • libGLESv2.dll
  • libEGL.dll

В зависимости от компилятора, который вы используете для компиляции приложения, могут потребоваться некоторые другие библиотеки:

  • Специфичные библиотеки MSVC:
    • msvcrXX.dll
    • msvcpXX.dll
  • MinGW специфичные библиотеки
    • libgcc_s_dw2-1.DLL
    • libstdc ++ — 6.dll

Примечание: во всех этих файлах замените XX текущей версией DLL в вашей системе.

Если вы не собирали Qt статически (по умолчанию), вам также понадобится DLL Qt5 в зависимости от модуля Qt, который вы используете в своем приложении. Пример:

  • Qt5Core.dll
  • Qt5Test.dll
  • Qt5Network.dll
  • и т.п.

Все эти DLL могут быть найдены в папке «bin», под вашей установочной директорией Qt.

РЕДАКТИРОВАТЬ

Недавно разработчики Qt создали инструмент windeployqt.exe, который поможет вам собрать всю необходимую библиотеку для развертывания приложения:

Usage: windeployqt [options] [file]
Qt Deploy Tool 5.3.0

The simplest way to use windeployqt is to add the bin directory of your Qt
installation (e.g. <QT_DIR\bin>) to the PATH variable and then run:
windeployqt <path-to-app-binary>
If ICU, ANGLE, etc. are not in the bin directory, they need to be in the PATH
variable. If your application uses Qt Quick, run:
windeployqt --qmldir <path-to-app-qml-files> <path-to-app-binary>

Options:
-?, -h, --help            Displays this help.
-v, --version             Displays version information.
--dir <directory>         Use directory instead of binary directory.
--libdir <path>           Copy libraries to path.
--debug                   Assume debug binaries.
--release                 Assume release binaries.
--force                   Force updating files.
--dry-run                 Simulation mode. Behave normally, but do not
copy/update any files.
--no-plugins              Skip plugin deployment.
--no-libraries            Skip library deployment.
--qmldir <directory>      Scan for QML-imports starting from directory.
--no-quick-import         Skip deployment of Qt Quick imports.
--no-translations         Skip deployment of translations.
--no-system-d3d-compiler  Skip deployment of the system D3D compiler.
--compiler-runtime        Deploy compiler runtime (Desktop only).
--no-compiler-runtime     Do not deploy compiler runtime (Desktop only).
--webkit2                 Deployment of WebKit2 (web process).
--no-webkit2              Skip deployment of WebKit2.
--json                    Print to stdout in JSON format.
--list <option>           Print only the names of the files copied.
Available options:
source:   absolute path of the source files
target:   absolute path of the target files
relative: paths of the target files, relative
to the target directory
mapping:  outputs the source and the relative
target, suitable for use within an
Appx mapping file
--verbose <level>         Verbose level.

Qt libraries can be added by passing their name (-xml) or removed by passing
the name prepended by --no- (--no-xml). Available libraries:
bluetooth clucene concurrent core declarative designercomponents designer gui
clucene qthelp multimedia multimediawidgets multimediaquick network nfc opengl
positioning printsupport qml quick quickparticles script scripttools sensors
serialport sql svg test widgets winextras xml xmlpatterns

Arguments:
[file]                    Binary or directory containing the binary.
8

Другие решения

У меня просто была такая же проблема, поэтому вот мое решение:

Сначала соберите QT с параметром -static.

Добавьте следующие библиотеки в вашу сборку:

Qt5PlatformSupport.lib
qwindows.lib
imm32.lib

Добавьте следующий путь к путям вашей библиотеки:

$(QTDIR)\plugins\platforms

В вашем коде (желательно main.cpp) добавьте следующую строку:

Q_IMPORT_PLUGIN(QWindowsIntegrationPlugin)

Результирующая сборка не должна зависеть от dll, связанных с qt.

3

Если вы используете libGLESv2.dll, то вы должны также включить libEGL.dll. Увидеть
Развертывание приложения Qt C ++ из Visual Studio qwindows.dll ошибка

0

Это Плагин платформы Qt вопрос. С помощью qt.conf решил проблему для меня на MacOS.
Неважно, если вы статически связываете Qt с не.

Я пытался статически ссылаться на libqcocoa.a (или qwindows.lib), но безуспешно. Я дам вам знать, если мне удастся.

0
По вопросам рекламы [email protected]