Не удалось запустить приложение, потому что не удалось найти или загрузить плагин платформы QT " 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 на машине dev.
когда я устанавливаю и запускаю на машине Windows Vista (несколько машин)
- VC++ redist 2012 11.0.61030.0 установлен
- VC++ redist 2010 10.0.40219 установлено
- плюс 2005, 2008 версии redist
(также не удается выполнить чистую установку 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).
а затем дальше вниз получите:
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
qwindows.dll
должен быть в папке с именем platforms
чтобы путь от исполняемого файла к dll был platforms/qwindows.dll
тогда как в моем случае этого было недостаточно. Мне также пришлось добавить следующую строку в начале моего main ()
QCoreApplication::addLibraryPath("./");
потом все работало.
Я получил эту проблему и как я ее решал:
используется зависимость walker (http://www.dependencywalker.com/), чтобы увидеть точный путь необходимых библиотек DLL. Попробуйте, потому что оба QtCreator и Qt framework имеют одинаковые библиотеки DLL, и вы должны точно указать используемые. Я скопировал все DLL, необходимые в той же папке, что и приложение.
Я скопировал платформы папок из Qt framework / plugins и скопировал их в ту же папку, что и приложение. Теперь приложение comtained также плагин / платформа / папка со всеми своими DLL
-
и самый важный шаг в моем случае-создать файл с именем qt.Conf в той же папке, что и приложение . Этот файл должен содержать путь к плагинам. Мой qt.файл conf содержит:
[путь]
Библиотеки.=./ lib / qtcreator
Плагины=Плагины
Imports=imports
Qml2Imports=QML в
приложение может работать на хост-системе, так как Qt bin
путь в системе PATH
переменной.
существует стандартный инструмент Qt для развертывания приложений Qt в Windows windeployqt
чтобы иметь возможность запускать приложение на целевых компьютерах, на которых не установлен Qt.
этот инструмент заботится о зависимостях Qt DLL, делает копию platforms\qwindows.dll
а также делает копию библиотек, которые вы не можете обнаружить с помощью Зависимость Walker, так как плагины изображений и некоторые другие DLL загружаются во время выполнения.
вам даже не нужно иметь свой Qt bin
папка в среде PATH
. Самое простое развертывание:
- копировать причине
exe
двоичный файл в новую папку - открыть
cmd
консоль в этой папке - вызов
windeployqt
используя полный путь (если он не находится в системеPATH
) и предоставить исполняемый файл, для образец:c:\Qt\Qt5.2.1.2.1\msvc2010_opengl\bin\windeployqt.exe application.exe
в результате у вас есть в этой папке все необходимые библиотеки Qt для запуска приложения.
инструмент windeployqt
имеет различные варианты. Он также может позаботиться о размещении qml
связанных файлов.
конечно, вы можете иметь также проблемы с MSVC redistributables, но они должны быть развернуты отдельно и установлены один раз в системе.
только некоторые сторонние библиотеки должны быть скопированы вручную, если они используются, например OpenSSL.
У меня была та же проблема "приложение не удалось запустить, потому что оно не смогло найти или загрузить плагин платформы QT" windows" Я исправил это, скопировав файлы ниже в приложение.exe (мой исполняемый файл приложения) папка,
Qt5Core.dll, Qt5Gui.dll, Qt5Widgets.dll и каталог "платформы" с qminimal.dll, 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.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 \ переименовать C:\Qt\ to C:\QtHidden\ (это превращает ваш компьютер в чистую среду, как и тот, который не имеет Qt установлен).
- Запуск C:\Deployment\MyApp - ... исполняемый.
теперь для взлома -
- дублировать папку для безопасности
- если ваш файл был в/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. он может работать в папке с файлами как: приложение.исполняемый \платформ\qwindows.файл DLL ...
- но не удалось загрузить qwindows на чистую машину с той же ОС, что и развивающаяся.
решено просто переместить папку платформы в плагины: приложение.исполняемый Плагины\платформ\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.
пробовал все вышеперечисленное-оказалось для меня это просто потому, что у меня не было главного Qt
библиотеки в apps
папку
- Qt5Core.dll файлы
- Qt5Widgets.dll файлы
- etc