2014-01-21 7 views
17

Я просмотрел все вопросы, которые, как представляется, связаны с переполнением стека, и ни одно из решений, похоже, мне не помогает.Приложение не удалось запустить, потому что оно не могло найти или загрузить плагин платформы 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
  • Project использует QtSingleApplication (QT-решения)
  • Приложение представляет собой 32-разрядное приложение
  • qmake запускается со следующим: -makefile -sp ес win32-msvc2012
  • .При использует 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"

Таким образом, я следовал инструкциям и добавил .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

Смотрите, если это помогает - http://stackoverflow.com/a/11185037/492336. Обратите особое внимание на: «Вы сможете настроить Vista на VS2012, но не на публичную бета-версию. Бета-версия, распространяемая с распространением, использовалась для установки на Vista, но не работала там. ». Я предполагаю, что если вы используете публичную бета-версию, то распространяемая версия будет установлена, но программа не будет запущена. – sashoalm

+0

Я смущен про ваш комментарий. Я строию машину Windows 7 x64. Также не используется бета-версия. Я ориентирую приложение на использование в Windows XP, Vista и т. Д. – gollumullog

+1

@sashoalm спасибо! Моя проблема была с другой версией и другим компилятором (Qt5.6.0, VS 2015), но в конечном итоге использование DLL публичного выпуска для Qt вместо публичных бета-библиотек решило проблему для меня. – hlongmore

ответ

1

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

Я скопировал все DLL из моей кварт директории в оба ./ и ./platforms моего каталога приложений.

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

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

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

Это вернуло меня в то же состояние, что и я.

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

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

9

Я получил этот вопрос, и как я ее решил:

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

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

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

    [Paths]
    Библиотеки = ../Lib/QtCreator
    Плагины = плагины
    Импорт = импорт
    Qml2Imports = QML

+0

Спасибо, что сработало для меня для Windows XP SP3. я закончил с этими DLL файлы, вместе с моим приложением, которое позволило обе отладки и выпуска версии для работы (Basic GUI + XML, в данном случае): icudt52.dll icuin52.dll icuuc52.dll msvcp120.dll msvcp120d.dll msvcr120.dll msvcr120d.dll Qt5Core.dll Qt5Cored.dll Qt5Gui.dll Qt5Guid.dll Qt5Widgets.dll Qt5Widgetsd.dll Qt5Xml.dll Qt5Xmld.dll vccorlib120.dll vccorlib120d .dll плагины \ платформы \ \t \t qminimal.dll \t \t qminimald.dll \t \t qoffscreen.dll \t \t qoffscreend.dll \t \t qwindows.dll \t \t qwindowsd.dll –

+0

Я был вынужден добавить libGLESv2.dll и libEGL.dll в список выше, чтобы избежать этой проблемы на qt5.3.1. – dvpublic

1

Я получил тот же выпуск: 1. он может работать в VS2010; 2. она может работать в папке с файлами, как: App.exe \ платформы \ qwindows.dll ...

  1. но не удалось загрузить qwindows на чистую машину с той же ОС в качестве проявляющего один.

решаемые просто переместить папку платформы для плагинов: App.exe плагины \ платформы \ qwindows.dll


плюс: qwindows.dll может быть переименован в любой вам нравится, как это опрашивается плагин interafce: qt_plugin_query_metadata()

22

ошибка вызвана тем, что программа не может найти qwindows.dll

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

В то время как это не было достаточно в моем случае.Я также должен был добавить следующую строку в начале моей основной()

QCoreApplication::addLibraryPath("./"); 

Тогда все сработало.

+1

Отлично, с addLibraryPath это сработало! Обратите внимание, что вы должны вызвать его перед построением QApplication –

3

Примечание. Эта проблема может быть вызвана также, если путь поиска для 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=. 
1

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

QCoreApplication::addLibraryPath("<yourpath>"); 

Если вы этого не сделаете и поместите свой qwindows.dll в другое место, Qt будет искать ваш PATH для DLL, что может занять много времени (10 секунд - несколько минут)!

7

Приложение может работать на хост-системе, так как путь 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.

2

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

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

  1. Закрыть Qt Creator.
  2. Скопируйте следующее в C: \ Deployment \ Release version of 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 \ Rename C: \ Qt \ to C: \ QtHidden \ (Это превращает ваш компьютер в чистую среду, точно такую ​​же, как у Qt).
  4. Запуск C: \ Deployment \ MyApp.exe.

Теперь для хака -

  1. дублирует папку для безопасности
  2. Если файл был в/кошках/развертывании, перейдите к/кошкам
  3. Теперь удалите папку развертывания в то время как .exe все еще работает.
  4. Он скажет вам, что он не может удалить определенные файлы, поэтому скажите Skip (или пропустите все)
  5. Что вы оставили с собой - это список всех DLL-файлов, которые ваш .exe действительно использовал и не мог delete: список всех файлов и только файлы, которые необходимо сохранить.

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

0

Пробовал все выше - оказалось для меня это было просто потому, что у меня не было основных Qt библиотек в папке apps

  • Qt5Core.dll
  • Qt5Widgets.dll
  • и т.д.
2

У меня была такая же проблема «Приложение не удалось запустить, потому что оно не могло найти или загрузить плагин платформы QT« окна » Я исправляю d это путем копирования ниже файлов в папку app.exe (исполняемый файл приложения),

Qt5Core.dll, Qt5Gui.dll, Qt5Widgets.dll и каталог «платформ» с qminimal.dll, qoffscreen.dll, qwindows. длл.

enter image description here

enter image description here

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

Смежные вопросы

 Смежные вопросы