Приложение не удалось запустить, так как не удалось найти или загрузить плагин 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?

727   11  

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. Я скопировал папку platforms из Qt framework / plugins и скопировал ее в ту же папку, что и приложение. Теперь приложение вступило в силу также плагин / платформа / папка со всеми своими DLL

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

    [пути]
    Библиотеки=../lib / qtcreator
    Plugins=Плагины
    Импорт=импорт
    Qml2Imports=qml

Приложение может работать на хост-системе, так как путь Qt bin находится в переменной system 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
    

В результате у вас есть в этой папке все необходимые библиотеки 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. Рассмотрим следующий сценарий:

  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.ехе все свои .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.exe.

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

  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. он может работать в папке с файлами как: апп.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
    Ничего не найдено.

Добавить ответ:
Отменить.