Не удалось запустить приложение, потому что не удалось найти или загрузить плагин платформы 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("./");

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


Я получил эту проблему и как я ее решал:

  1. используется зависимость walker (http://www.dependencywalker.com/), чтобы увидеть точный путь необходимых библиотек DLL. Попробуйте, потому что оба QtCreator и Qt framework имеют одинаковые библиотеки DLL, и вы должны точно указать используемые. Я скопировал все DLL, необходимые в той же папке, что и приложение.

  2. Я скопировал платформы папок из Qt framework / plugins и скопировал их в ту же папку, что и приложение. Теперь приложение comtained также плагин / платформа / папка со всеми своими DLL

  3. и самый важный шаг в моем случае-создать файл с именем 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.

enter image description here

enter image description here

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


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

  1. я устанавливаю Qt в c:\Qt\...
  2. я разрабатываю приложение и правильно развертываю его в другом месте.
  3. он работает на любом компьютере правильно, потому что он включает в себя qwindows.dll в подкаталоге.
  4. обновить местных Qt в новый версия.
  5. я снова пытаюсь запустить приложение.

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

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

[Paths]
Plugins=.

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

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

  1. Закрыть Qt Creator.
  2. скопируйте следующее в C:\Deployment\ версия выпуска MyApp.exe все .dll файлы из C:\Qt\5.2.1\mingw48_32\bin\ все папки от C:\Qt\5.2.1\mingw48_32\plugins\
  3. (если вы использовали QML) все папки из C:\Qt\5.2.1\mingw48_32\qml \ переименовать C:\Qt\ to C:\QtHidden\ (это превращает ваш компьютер в чистую среду, как и тот, который не имеет Qt установлен).
  4. Запуск C:\Deployment\MyApp - ... исполняемый.

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

  1. дублировать папку для безопасности
  2. если ваш файл был в/cat / Deployment, перейдите в /cat
  3. удалить Папка развертывания во время.exe все еще работает.
  4. он скажет вам, что он не может удалить некоторые файлы, так сказать, пропустить(или не пропустить)
  5. то ,что у вас осталось, - это список всех.dll-файлы, которые ваш .exe фактически использовал и не мог удалить: список всех файлов и только файлы, которые вам нужно сохранить.

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


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

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

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

версия.dll вызывала сбой (отмечено в dependency walker), поэтому я удалил его из обоих мест.

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

этот вернула меня в прежнее состояние.

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

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


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

  1. но не удалось загрузить 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