Приложение не удалось запустить, так как не удалось найти или загрузить плагин QT platform " windows"
Я просмотрел все вопросы, которые, по-видимому, связаны с переполнением стека, и ни одно из решений, кажется, не помогает мне.
Я создаю приложение 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 на машине разработки.
Когда я устанавливаю и запускаю на машине Windows Vista (несколько машин)
- VC++ redist 2012 11.0.61030.0 установлен
- VC++ redist 2010 10.0.40219 установлен
- плюс 2005, 2008 версии redist
(также терпит неудачу на a чистая установка Windows 7)
Я получаю:
Application failed to start because it could not find or load the QT platform plugin "windows"
Поэтому я последовал инструкциям и добавил a .платформы / каталог, и добавил 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).
А затем еще ниже получаем the:
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?
11 ответов:
Ошибка вызвана тем, что программа не может найти
qwindows.dllХотя в моем случае этого было недостаточно. Мне также пришлось добавить следующую строку в начале моего main ()
qwindows.dllдолжен находиться в папке с именемplatforms, так что путь от вашего исполняемого файла к dll будетplatforms/qwindows.dllТогда все сработало.QCoreApplication::addLibraryPath("./");
Я получил эту проблему и как я ее решил:
Используемая зависимость walker (http://www.dependencywalker.com/), чтобы увидеть точный путь необходимых библиотек DLL. Попробуйте, потому что и QtCreator, и Qt framework имеют одинаковые библиотеки DLL, и вы должны точно определить, какие из них используются. Я скопировал все необходимые библиотеки DLL в ту же папку, что и приложение.
Я скопировал папку platforms из Qt framework / plugins и скопировал ее в ту же папку, что и приложение. Теперь приложение вступило в силу также плагин / платформа / папка со всеми своими DLL
И самым важным шагом в моем случае является создание файла с именем qt.conf в той же папке, что и приложение . Этот файл должен содержать путь к плагинам. Мой qt.файл conf содержит:
[пути]
Библиотеки=../lib / qtcreator
Plugins=Плагины
Импорт=импорт
Qml2Imports=qml
Приложение может работать на хост-системе, так как путь Qt
binнаходится в переменной systemPATH.Существует стандартный инструмент Qt для развертывания приложений Qt на Windows
windeployqtчтобы иметь возможность запускать приложение на целевых машинах, на которых не установлен Qt.Этот инструмент заботится о зависимостях Qt DLL, делает копию
Вам даже не нужно иметь папку Qtplatforms\qwindows.dll, а также делает копию библиотек, которые вы не можете обнаружить с помощью Dependency Walker , так как Плагины изображений и некоторые другие библиотеки DLL загружаются во время выполнения.binв вашей средеPATH. Самое простое развертывание:
- скопировать построенный
exeдвоичный файл в новую папку- откройте консоль
cmdв этой папке- вызовите
windeployqtиспользуя полный путь (если его нет в системеPATH) и предоставьте свой исполняемый файл, например:c:\Qt\Qt5.2.1\5.2.1\msvc2010_opengl\bin\windeployqt.exe application.exeВ результате у вас есть в этой папке все необходимые библиотеки DLL Qt, чтобы запустить приложение.
Инструмент
windeployqtимеет различные опции. Он также может позаботиться о развертывании связанных файловqml.Конечно, вы можете иметь также проблемы с MSVC redistributables, но они должны быть развернуты отдельно и установлены один раз в системе.
Только некоторые сторонние библиотеки должны быть скопированы вручную, если они используются, например OpenSSL.
У меня была та же проблема "приложение не удалось запустить, потому что он не мог найти или загрузить Qt platform plugin" windows" Я исправил это, скопировав файлы ниже в приложение.папка exe (my app executable),
Qt5Core.dll, Qt5Gui.dll, Qt5Widgets.dll и каталог "платформ" с qminimal.проблемы, qoffscreen.dll, qwindows.файл DLL.
Я надеюсь, что это кому-то поможет
Примечание эта проблема можеттакже быть вызвана, если путь поиска для
qwindows.dll, который закодирован в вашем приложении, включает путь, где вы установили Qt. Рассмотрим следующий сценарий:
- я устанавливаю Qt на
c:\Qt\...- я разрабатываю приложение и правильно развертываю его в другом месте.
- он работает на любом компьютере правильно, потому что он включает
qwindows.dllв подкаталог.- я обновляю свой локальный Qt до новой версии.
- я пытаюсь запустить свое приложение снова.
Результатом является эта ошибка, потому что
qwindows.dllвc:\Qt\...находится перед в его локальном каталоге и он несовместим с ним. Очень раздражать.Решение состоит в том, чтобы поместить файл
qt.confв тот же каталог, что и ваш exe-файл. Я не знаю, как этого избежать. Если вы использовали инструментwindeployqt.exeдля развертывания вашего приложения, поэтому у вас есть подкаталог с именемplatforms, то этого достаточно:[Paths] Plugins=.
Для людей, у которых эта проблема в будущем - у меня есть грязный маленький хак, работавший на меня. Попробуйте на свой страх и риск.
Выполните все шаги в начальном развертывании (быстрый и грязный) [http://wiki.qt.io/Deploy_an_Application_on_Windows]
- Закройте Qt Creator.
- скопируйте следующее в C:\Deployment\ версия выпуска MyApp.ехе все свои .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\ переименовать C:\Qt\ to C:\QtHidden\ (это превращает ваш компьютер в чистую среду, точно так же, как тот, на котором не установлен Qt).
- Запуск C:\Deployment\MyApp.exe.
Теперь для взлома -
- дублируйте папку для безопасности
- Если ваш файл был в/cat / Deployment, перейдите в /cat
- Теперь удалите папку развертывания в то время как .exe все еще работает.
Он скажет вам, что не может этого сделать. удалить определенные файлы, так сказать пропустить(или пропустить все)- то, что у вас осталось, - это список всех .dll файлы, которые ваши .exe на самом деле использовал и не мог удалить: список всех файлов и только те файлы, которые нужно сохранить.
Вы можете закрыть .теперь exe-файл. Чтобы проверить, нормально ли он развертывается, зайдите в папку, где вы его установили, и скажите: C:/Qt и переименовать его в C:/NotQt (в основном сделать Qt невидимым для системы). Если он работает сейчас, то будет развернут на других системах чаще всего-нет.
Ну, я решил свою проблему, хотя и не уверен, в чем разница:
Я скопировал каждую dll из моего каталога qt в оба ./ и ./ платформы каталога моих приложений.
Приложение прошло мимо ошибки, но затем разбилось.
Версия.dll вызывала сбой (отмечено в dependency walker), поэтому я удалил его из обоих мест.
Приложение запустилось, поэтому я систематически удалял все ненужные dll.
Это вернуло меня в то же состояние, в котором я был. первоначально.
Затем я удалил свое приложение и повторно установил (только с помощью ./ платформы / qwindows.dll файл остается), приложение работает правильно.
Таким образом, все, что я могу предположить, это то, что у меня была неправильная версия qwindows.DLL в каталог платформы.
У меня та же проблема.: 1. он может работать в VS2010; 2. он может работать в папке с файлами как: апп.exe \платформы\qwindows.файл DLL ...
Но он не смог загрузить qwindows на чистую машину с той же ОС, что и развивающаяся.
Решается простым перемещением папки платформы в плагины: апп.exe Плагины\платформы\qwindows.dll
Плюс: qwindows.DLL может быть переименован в любое вам нравится, как она запрашивается с помощью плагина interafce: qt_plugin_query_metadata ()
В нем отсутствуют qwindows.dll, которая обычно должна быть в платформах, если вы не добавляете:
QCoreApplication::addLibraryPath("<yourpath>");Если вы этого не сделаете, кстати, и поставьте свои qwindows.dll где-то еще, Qt будет искать ваш путь для DLL, что может занять много времени (10s - несколько минут)!
Для меня, я должен был установить
QT_QPA_PLATFORM_PLUGIN_PATHв каталог платформ, и тогда это сработало.Как бы то ни было, это решение также было упомянуто на GitHub .
Попробовал все вышеперечисленное-оказалось, что для меня это было просто потому, что у меня не было основной библиотеки DLL
Qtв папкеapps
- Qt5Core.dll
- Qt5Widgets.dll
- etc


Comments