Приложение не удалось запустить, поскольку оно не могло найти или загрузить плагин платформы 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 с - несколько минут)!
Ответ 10
Для меня я должен был установить QT_QPA_PLATFORM_PLUGIN_PATH
в каталог платформ, а затем он работал.
Для чего это стоит, это решение было также упомянутое в GitHub.
Ответ 11
Пробовал все вышеперечисленное - оказалось для меня просто потому, что у меня не было основных Qt
dll в папке apps
- Qt5Core.dll
- Qt5Widgets.dll
- и т.д.
Ответ 12
Я исправил это, поместив qt.conf
в папку exe моего приложения:
[Paths]
Prefix=C:/Qt/Qt5.11.2/5.11.2/msvc2017
Куда:
- Я установил пользовательский набор Qt в
C:\Qt\Qt5.11.2\5.11.2\msvc2017
-
qt.conf
сообщает приложению, где находится пользовательский набор, через свойство Prefix
. Обратите внимание, что используйте косую черту, а не обратную (!) - И, опционально, папка 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.