Приложение не удалось запустить, поскольку оно не могло найти или загрузить плагин платформы QT "окна",

Я просмотрел все вопросы, которые, как представляется, связаны с переполнением стека, и ни одно из решений, похоже, мне не помогает.

Я создаю приложение Qt с этой настройкой:

  • Windows 7 Professional x64
  • Visual Studio 2012
  • Qt 5.2.0, построенный с помощью configure -developer-build -debug-and-release -opensource -nomake examples -nomake tests -platform win32-msvc2012 -no-opengl
  • В проекте используется QtSingleApplication (qt-solutions)
  • Приложение представляет собой 32-разрядное приложение
  • qmake запускается со следующим: -makefile -spec win32-msvc2012
  • .pri использует QMAKE_CXX += /D_USING_V110_SDK71_

Я могу создать и запустить свою программу на моей машине разработки (отмечено выше); Я также могу установить и запустить пакет из каталога Program Files на машине dev.

Когда я устанавливаю и запускаю на машине Windows Vista (несколько машин)

  • Установлен VС++ redist 2012 11.0.61030.0
  • VС++ redist 2010 10.0.40219 установлен
  • plus 2005, версии версии redist

(также не удается выполнить чистую установку Windows 7)

Я получаю:

Application failed to start because it could not find or load the QT platform plugin "windows"

Итак, я выполнил инструкции и добавил каталог .platforms/и добавил qwindows.dll(также добавил qminimal.dll и qoffscreen.dll); Я также добавил libEGL.dll, libGLESv2.dll(хотя я не нуждаюсь в них, я не думаю)

Как только я добавил qoffscreen.dll, я получаю дополнительное сообщение: Available platform plugins are: offscreen

Если я запускаю Dependency Walker, я получаю эту ошибку:

GetProcAddress(0x76CA0000 [KERNEL32.DLL], "GetCurrentPackageId") called from "MSVCR110.DLL" at address 0x6AC6FDFA and returned NULL. Error: The specified procedure could not be found (127).

а затем еще ниже:

GetProcAddress(0x745A0000 [UXTHEME.DLL], "BufferedPaintUnInit") called from "COMCTL32.DLL" at address 0x745FFBF8 and returned 0x745AE18C.
This application failed to start because it could not find or load the Qt platform plugin "windows".

Available platform plugins are: offscreen.

Reinstalling the application may fix this problem.

Любые идеи по исправлению этой проблемы dll?

Ответ 1

Ну, я решил свою проблему, хотя я не уверен, в чем разница:

Я скопировал каждую dll из моей директории qt в оба./и./platforms каталога моего приложения.

Приложение прошло мимо ошибки, но затем разбилось.

ВЕРСИЯ .dll вызывала сбой (отмечен в ходу зависимостей), поэтому я удалил его из обоих мест.

Приложение запущено, поэтому я систематически удалял все ненужные библиотеки dll.

Это вернуло меня к тому же состоянию, в котором я был изначально.

Затем я удалил свое приложение и заново установил (осталось только файл. /platforms/qwindows.dll), приложение работает правильно.

Итак, я могу предположить, что у меня была некорректная версия qwindows.dll в каталоге платформ.

Ответ 2

Ошибка вызвана тем, что программа не может найти qwindows.dll

qwindows.dll должен находиться в папке с именем platforms, чтобы путь от исполняемого файла к dll был platforms/qwindows.dll

В то время как этого было недостаточно. Я также должен был добавить следующую строку в начале моей основной()

QCoreApplication::addLibraryPath("./");

Затем все сработало.

Ответ 3

У меня возникла эта проблема и как я ее решил:

  • Используемый хост зависимостей (http://www.dependencywalker.com/), чтобы увидеть точный путь к необходимым DLL. Попробуйте, потому что и QtCreator, и QT Framework имеют одинаковые DLL, и вы должны точно определить точные. Я скопировал все dll, необходимые в той же папке, что и приложение.

  • Я скопировал платформы папок из фреймворка/плагинов QT и скопировал его в ту же папку, что и приложение. Теперь приложение удовлетворило также плагин/платформу/папку со всеми ее DLL

  • И самый важный шаг в моем случае - создать файл с именем qt.conf в той же папке, что и приложение. Этот файл должен содержать путь к плагинам. Мой файл qt.conf содержит:

    [Paths]
    Библиотеки =../Library/QtCreator
    Плагины = плагины
    Импорт = импорт
    Qml2Imports = QML

Ответ 4

Приложение может работать в хост-системе, поскольку путь Qt bin находится в переменной PATH системы.

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

Этот инструмент заботится о зависимостях Qt DLL, делает копию platforms\qwindows.dll, а также создает копию библиотек, которые невозможно обнаружить с помощью Dependency Walker, поскольку плагины изображений и некоторые другие DLL загружаются во время выполнения.

Вам даже не нужно иметь свою папку Qt bin в вашей среде PATH. Простейшее развертывание:

  • копировать встроенную exe в новую папку
  • откройте консоль cmd в этой папке
  • вызов windeployqt с использованием полного пути (если он не находится в системе PATH) и предоставить ваш исполняемый файл, например:
    c:\Qt\Qt5.2.1\5.2.1\msvc2010_opengl\bin\windeployqt.exe application.exe
    

В результате у вас есть в этой папке все необходимые Qt DLL для запуска приложения.

Инструмент windeployqt имеет различные параметры. Он также может позаботиться о развертывании связанных файлов qml.

Конечно, у вас также могут возникать проблемы с распространяемыми дистрибутивами MSVC, но их следует развернуть отдельно и установить один раз для каждой системы.

Только некоторые сторонние библиотеки должны быть скопированы вручную, если они используются, например OpenSSL.

Ответ 5

У меня возникла та же проблема: "Приложение не удалось запустить, потому что оно не могло найти или загрузить плагин платформы QT" Windows ". Я исправил это, скопировав следующие файлы в папку app.exe (исполняемый файл моего приложения),

Qt5Core.dll, Qt5Gui.dll, Qt5Widgets.dll и каталог "платформы" с qminimal.dll, qoffscreen.dll, qwindows.dll.

enter image description here

enter image description here

Я надеюсь, что это поможет кому-то

Ответ 6

Примечание. Эта проблема также может быть вызвана, если путь поиска для qwindows.dll, который закодирован в вашем приложении, включает путь, в котором вы установили Qt. Рассмотрим следующий сценарий:

  • Я устанавливаю Qt в c:\Qt\...
  • Я разрабатываю приложение и разворачиваю его в другом месте.
  • Он работает на любом компьютере должным образом, потому что он включает qwindows.dll в подкаталог.
  • Я обновляю свой локальный Qt до новой версии.
  • Я снова пытаюсь запустить свое приложение.

Результатом является эта ошибка, потому что qwindows.dll in c:\Qt\... найден до того, что находится в ее локальном каталоге, и он несовместим с ним. Очень раздражает.

Решение состоит в размещении файла qt.conf в том же каталоге, что и ваш exe файл. Я не знаю, как этого избежать. Если вы использовали инструмент windeployqt.exe для развертывания своего приложения, поэтому у вас есть подкаталог под названием platforms, то этого достаточно:

[Paths]
Plugins=.

Ответ 7

Для людей, у которых есть эта проблема в будущем - у меня грязный маленький взлом, работал на меня. Попробуйте на свой страх и риск.

Следуйте всем шагам в первоначальном развертывании (быстрый и грязный) [http://wiki.qt.io/Deploy_an_Application_on_Windows]

  • Закрыть Qt Creator.
  • Скопируйте следующее в C:\Deployment\The release версии MyApp.exe. Все DLL файлы из C:\Qt\5.2.1\mingw48_32\bin\Все папки из C:\Qt\5.2.1\mingw48_32\Plugins\
  • (Если вы использовали QML) Все папки из C:\Qt\5.2.1\mingw48_32\qml\Rename C:\Qt\to C:\QtHidden\(Это превращает ваш компьютер в чистую среду, как и тот, у которого не установлен Qt).
  • Запустить C:\Deployment\MyApp.exe.

Теперь для взлома -

  • Дублируйте папку для безопасности
  • Если ваш файл находился в /cat/Deployment, перейдите в /cat
  • Теперь удалите папку Deployment, пока файл .exe все еще запущен.
  • Он скажет вам, что он не может удалить определенные файлы, поэтому скажите Skip (или пропустите все)
  • То, что у вас осталось, - это список всех DLL файлов, которые ваш .exe действительно использовал и не смог удалить: список всех файлов и только файлы, которые вам нужно сохранить.

Теперь вы можете закрыть файл .exe. Чтобы проверить, хорошо ли оно развертывается, зайдите в папку, где вы его установили, скажите C:/Qt и переименуйте его в C:/NotQt (в основном, чтобы Qt был невидимым для системы). Если он работает сейчас, он будет распространяться на другие системы чаще, чем нет.

Ответ 8

У меня такая же проблема: 1. он может работать в VS2010; 2. он может запускаться в папке с файлами как: app.exe \ Платформы \qwindows.dll ...

  • но он не смог загрузить qwindows на чистую машину с той же ОС, что и разрабатывающая.

Решено просто переместить папку платформы в плагины: app.exe плагины\платформы\qwindows.dll


plus: qwindows.dll может быть переименован как любой, который вам нравится, поскольку он запрашивается плагином interafce: qt_plugin_query_metadata()

Ответ 9

Отсутствует qwindows.dll, который обычно должен находиться на платформах, если вы не добавили:

QCoreApplication::addLibraryPath("<yourpath>");

Если вы этого не сделаете, и поместите qwindows.dll в другое место, Qt будет искать ваш PATH для DLL, что может занять много времени (10 с - несколько минут)!

Ответ 11

Пробовал все вышеперечисленное - оказалось для меня просто потому, что у меня не было основных Qt dll в папке apps

  • Qt5Core.dll
  • Qt5Widgets.dll
  • и т.д.

Ответ 12

Я исправил это, поместив qt.conf в папку exe моего приложения:

[Paths]
Prefix=C:/Qt/Qt5.11.2/5.11.2/msvc2017

Куда:

  1. Я установил пользовательский набор Qt в C:\Qt\Qt5.11.2\5.11.2\msvc2017
  2. qt.conf сообщает приложению, где находится пользовательский набор, через свойство Prefix. Обратите внимание, что используйте косую черту, а не обратную (!)
  3. И, опционально, папка bin набора Qt включена в мою PATH окружения PATH

Определение Prefix в вашем файле qt.conf позволяет ему найти qwindows.dll платформы qwindows.dll при запуске вашего приложения.

Ответ 13

Вам необходимо добавить переменную среды QT_QPA_PLATFORM_PLUGIN_PATH в систему, которая указывает на каталог платформы в плагинах QT. В моем случае я использовал Anaconda и PySide2. Поэтому мой путь к каталогу был C:\ProgramData\Anaconda3\envs\cv\Lib\site-packages\PySide2\plugins. Это устраняет проблему для каждого проекта QT. В противном случае у вас есть копия каталога платформ для каждого проекта QT.