Qt 5.1.1: не удалось запустить приложение, так как отсутствует плагин "windows" платформы


Изменить: Некоторые люди начали отмечать мой вопрос как дубликат. Не забывайте, что когда я задавал этот вопрос, было много похожих вопросов (см., Например, список ниже). Однако ни один из этих ответов не решил мою проблему. После долгого поиска я нашел комментарий, который был проигнорирован всеми пользователями, указывающими на отсутствующую библиотеку. Теперь, спустя много месяцев, комментарий был изменен на ответ. Однако, когда я ответил на этот вопрос msyself, я намеревался помочь другим людям, напрямую предоставив решение. Это не должно быть забыто, и пока мой ответ помог многим людям. Поэтому мой вопрос точно не дубликат. Кстати: принятый ответ по приведенной ссылке сверху не решает проблему!


Да, я использовал поиск:

Не удалось загрузить плагин платформы "windows". Доступные платформы: Ошибка

Развертывание приложения Qt C++ из Visual Studio qwindows.dll ошибка

Не удалось загрузить плагин платформы "Windows" Доступные платформы: Windows, минимальный

Однако в моем случае проблема все еще сохраняется. Я использую Qt 5.1.1 с Visual Studio 2012 и разработал свое приложение для Windows 7 с Qt Creator 2.8.1. Приложение скомпилировано в режиме "Release" и может быть выполнено, если непосредственно запущено с Qt Creator.

Однако при запуске из папки "release" я получаю следующее сообщение:

Не удалось запустить это приложение, так как не удалось найти или загрузить плагин платформы Qt "windows". Доступные плагины платформы: минимальный, вне экрана, Windows.

Структура папки выглядит следующим образом:

release
+ gui.exe
+ icudt51.dll
+ icuin51.dll
+ icuuc51.dll
+ libGLESv2.dll
+ Qt5Core.dll
+ Qt5Gui.dll
+ Qt5Widgets.dll
+ platforms

Платформы - это папка, непосредственно скопированная из Qt\Qt5.1.1\5.1.1\msvc2012\plugins\platform, включая, например, qwindows.dll. Не имеет значения, переименую ли я его в "платформу", как это сделали некоторые другие пользователи. Qt до сих пор не находит "окна плагинов платформы", где моя ошибка?

22 ответа

Решение

Хорошо, как размещено здесь /questions/35121707/qt5-static-build-privodit-k-oshibke-pri-zagruzke-plagina-platformyi-windows/35121726#35121726 без особого внимания со стороны других пользователей:

Отсутствует libEGL.dll! Несмотря на то, что об этом не сообщалось при попытке запустить приложение (сообщалось обо всех других *.dll, таких как Qt5Gui.dll).

Я создал каталог платформ рядом с моим exe-местоположением и поместил qwindows.dll внутрь, но я все еще получил "Не удалось загрузить плагин платформы"windows". Доступные платформы: ошибка: windows".

Я скопировал qwindows.dll из C:\Qt\Qt5.1.1\Tools\QtCreator\bin\plugins\ Platforms, который не является правильным местом. Я посмотрел на журнал отладки, запущенный в Qt Creator, и обнаружил, что мое приложение смотрело в C:\Qt\Qt5.1.1\5.1.1\mingw48_32\plugins\platform, когда оно запускалось в отладчике.

Когда я скопировал с C:\Qt\Qt5.1.1\5.1.1\mingw48_32\plugins\platform, все работало нормально.

Я нашел неожиданное, но интуитивно понятное решение. Если вы скопируете и вставите файл qwindows.dll, находящийся в корзине того компилятора, который вы использовали для выпуска своего приложения, в папку с именем "платформы", вы можете затем переместить эту папку в тот же каталог, что и ваше приложение, и, как по волшебству, он работает.

Также еще один полезный совет, Qt поставляется с консольными приложениями платформы, которые будут добавлять все зависимости (включая такие, как qwindows.dll и libEGL.dll) в папку вашего развернутого исполняемого файла. Приложение для Windows называется windeployqt, а документацию можно найти здесь http://doc.qt.io/qt-5/windows-deployment.html. Это приложение сэкономило мне так много времени, и это действительно правильный способ развернуть ваш исполняемый файл, чтобы ничего не пропустить.

Настройка QT_QPA_PLATFORM_PLUGIN_PATH у меня работала переменная окружения%QTDIR%\plugins\platform \.

Также было упомянуто здесь и здесь.

Я столкнулся с этим, и ни один из ответов, которые я мог найти, не исправил это для меня.

Мой коллега установил Qt (5.6.0) на своем компьютере по адресу: C:\Qt\Qt5.6.0\5.6\msvc2015\plugins
У меня Qt (5.6.2) установлен в том же месте.

Из этого поста я узнал: http://www.tripleboot.org/?p=536, что Qt5Core.dll имеет расположение для плагинов, записанных в него при первой установке Qt. Так как каталоги моего коллеги и моего Qt были одинаковыми, но были установлены разные версии Qt, необходим другой файл qwindows.dll. Когда я запускал exe-файл, развернутый им, он использовал мой файл C:\Qt\Qt5.6.0\5.6\msvc2015\plugins\platform \qwindows.dll вместо файла, расположенного рядом с исполняемым файлом в подпапке. \ Platform.

Чтобы обойти это, я добавил следующую строку кода в приложение, которое, кажется, заставляет его искать рядом с exe-файлом подпапку "платформы", прежде чем он ищет путь в Qt5Core.dll.

QCoreApplication::addLibraryPath(".");

Я добавил приведенную выше строку в метод main перед вызовом QApplication следующим образом:

int main( int argc, char *argv[] )
{
    QCoreApplication::addLibraryPath(".");
    QApplication app( argc, argv );
    ...
    return app.exec();
}

Создать реж platforms и скопировать qwindows.dll к этому, platforms а также app.exe находятся в том же направлении

cd app_dir mkdir platforms xcopy qwindows.dll platforms\qwindows.dll

Структура папок + app.exe + platforms\qwindows.dll

Я нашел другое решение. Создайте qt.conf в папке приложения следующим образом:

[Paths]
Prefix = .

А затем скопируйте папку плагинов в папку приложения, и она работает для меня.

Для тех, кто пришел с QT версии 5.14.0, мне потребовалось 2 дня, чтобы найти это сообщение об ошибке:

windeployqt не работает с MinGW QTBUG-80763 Будет исправлено в 5.14.1

https://wiki.qt.io/Qt_5.14.0_Known_Issues

Так что имейте в виду. Использование windeployqt с MinGW приведет к той же ошибке, что указана здесь.

Для меня решение было исправить PATH переменная. Это был Anaconda3\Library\bin в качестве одного из первых путей. Этот каталог содержит некоторые библиотеки Qt, но не все. Видимо, это проблема. Перемещение C:\Programs\Qt\5.12.3\msvc2017_64\bin в начало PATH решил проблему для меня.

У меня была эта проблема при использовании QT 5.6, Anaconda 4.3.23, python 3.5.2 и pyinstaller 3.3. Я создал программу на python с интерфейсом, разработанным с использованием QTcreator, но мне пришлось развернуть его на других компьютерах, поэтому мне нужно было создать исполняемый файл с использованием pyinstaller.

Я обнаружил, что проблема была решена на моем компьютере, если я установил следующие переменные среды:

QT_QPA_PLATFORM_PLUGIN_PATH:% QTDIR% \ plugins \ platform \

QTDIR: C: \ Miniconda3 \ pkgs \ qt-5.6.2-vc14_3 \ Library

Но это решение работало только на моем ПК, на котором были установлены conda и qt в этих папках.

Чтобы решить эту проблему и заставить исполняемый файл работать на любом компьютере, мне пришлось отредактировать ".spec" (файл, сначала сгенерированный pyinstaller), чтобы включить следующую строку:

datas = [('C: \ Miniconda3 \ pkgs \ qt-5.6.2-vc14_3 \ Library \ plugins \ платформы *.dll', 'платформы'),]

Это решение основано на ответах Джима Г. и CrippledTable

Большинство из этих ответов содержат хорошую (правильную) информацию, но в моем случае все еще что-то не хватало.

Мое приложение построено как библиотека (dll) и вызывается приложением не из Qt. я использовал windeployqt.exe настроить dll, платформы, плагины и т. д. в каталоге установки, но он все еще не может найти платформу. После некоторых экспериментов я понял, что рабочий каталог приложения установлен в другую папку. Итак, я схватил каталог, в котором "жил" DLL, используя GetModuleHandleExA и добавил этот каталог в путь к библиотеке Qt во время выполнения, используя

QCoreApplication::addLibraryPath(<result of GetModuleHandleExA>);

Это сработало для меня.

У меня была та же проблема, и я решил ее, применив несколько вещей. Первое, если это программа, которую вы сделали с Qt.

В папке (в моем случае) "C: \ Qt \ Qt5.10.0 \ 5.10.0 \ msvc2017_64 \ plugins" вы найдете другие папки, одна из которых - "платформы". Эта папка "платформы" будет скопирована рядом с вашим исполняемым файлом.exe. Теперь, если вы получаете сообщение об ошибке 0xc000007d, значит, вы не скопировали версию, которая была, поскольку она может быть 32-битной или 64-битной.

Если вы продолжаете с ошибками, то вам не хватает больше библиотек. С помощью программы "Dependency Walker" вы можете обнаружить некоторые из пропавших папок. Конечно, он укажет вам, что вам нужен NVIDIA .dll, и скажет вам местоположение.

Другой способ, вместо того, чтобы использовать "Dependency Walker", - скопировать все.dll из вашей папки "C: \ Windows \ System32" рядом с исполняемым файлом. Запустите ваш.exe и, если все загружается хорошо, поэтому у вас нет места в библиотеках dll, которые вам не нужны или не используются, используйте программу.exe со всеми вашими опциями, и, не закрывая.exe, вы удалите все. dll, что вы только что скопировали рядом с.exe, поэтому, если эти.dll используются вашей программой, система не позволит вам стереть, а только удалит ненужные.

Я надеюсь, что это решение вам подходит.

Помните, что если ваша операционная система 64-битная, библиотеки будут в папке System32, а если ваша операционная система 32-битная, они также будут в папке System32. Это происходит так, что не возникает проблем совместимости с 32-битными программами на 64-битном компьютере. Папка SysWOW64 содержит 32-битные файлы в качестве резервной копии.

Приложение qtbase/bin/windeployqt.exe автоматически развертывает ваше приложение. Если вы запускаете приглашение с правильно установленными переменными envirenment, оно развертывается в текущем каталоге. Вы найдете пример скрипта:

@echo off
set QTDIR=E:\QT\5110\vc2017

set INCLUDE=S:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\VC\Tools\MSVC\14.15.26726\ATLMFC\include;S:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\VC\Tools\MSVC\14.15.26726\include;C:\Program Files (x86)\Windows Kits\NETFXSDK\4.6.1\include\um;C:\Program Files (x86)\Windows Kits\10\include\10.0.14393.0\ucrt;C:\Program Files (x86)\Windows Kits\10\include\10.0.14393.0\shared;C:\Program Files (x86)\Windows Kits\10\include\10.0.14393.0\um;C:\Program Files (x86)\Windows Kits\10\include\10.0.14393.0\winrt;C:\Program Files (x86)\Windows Kits\10\include\10.0.14393.0\cppwinrt

set LIB=S:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\VC\Tools\MSVC\14.15.26726\ATLMFC\lib\x86;S:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\VC\Tools\MSVC\14.15.26726\lib\x86;C:\Program Files (x86)\Windows Kits\NETFXSDK\4.6.1\lib\um\x86;C:\Program Files (x86)\Windows Kits\10\lib\10.0.14393.0\ucrt\x86;C:\Program Files (x86)\Windows Kits\10\lib\10.0.14393.0\um\x86;

set LIBPATH=S:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\VC\Tools\MSVC\14.15.26726\ATLMFC\lib\x86;S:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\VC\Tools\MSVC\14.15.26726\lib\x86;S:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\VC\Tools\MSVC\14.15.26726\lib\x86\store\references;C:\Program Files (x86)\Windows Kits\10\UnionMetadata\10.0.17134.0;C:\ProgramFiles (x86)\Windows Kits\10\References\10.0.17134.0;C:\Windows\Microsoft.NET\Framework\v4.0.30319;

Path=%QTDIR%\qtbase\bin;%PATH%
set VCIDEInstallDir=S:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\Common7\IDE\VC\
set VCINSTALLDIR=S:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\VC\
set VCToolsInstallDir=S:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\VC\Tools\MSVC\14.11.25503\
set VisualStudioVersion=15.0
set VS100COMNTOOLS=C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\Tools\
set VS110COMNTOOLS=C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\Tools\
set VS120COMNTOOLS=S:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\Tools\
set VS150COMNTOOLS=S:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\Common7\Tools\
set VS80COMNTOOLS=C:\Program Files (x86)\Microsoft Visual Studio 8\Common7\Tools\
set VS90COMNTOOLS=c:\Program Files (x86)\Microsoft Visual Studio 9.0\Common7\Tools\
set VSINSTALLDIR=S:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\
set VSSDK110Install=C:\Program Files (x86)\Microsoft Visual Studio 11.0\VSSDK\
set VSSDK150INSTALL=S:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\VSSDK
set WindowsLibPath=C:\Program Files (x86)\Windows Kits\10\UnionMetadata;C:\Program Files (x86)\Windows Kits\10\References
set WindowsSdkBinPath=C:\Program Files (x86)\Windows Kits\10\bin\
set WindowsSdkDir=C:\Program Files (x86)\Windows Kits\10\
set WindowsSDKLibVersion=10.0.14393.0\
set WindowsSdkVerBinPath=C:\Program Files (x86)\Windows Kits\10\bin\10.0.14393.0\
set WindowsSDKVersion=10.0.14393.0\
set WindowsSDK_ExecutablePath_x64=C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6.1 Tools\x64\
set WindowsSDK_ExecutablePath_x86=C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6.1 Tools\

mkdir C:\VCProjects\Application\Build\VS2017_QT5_11_32-Release\setup
cd C:\VCProjects\Application\Build\VS2017_QT5_11_32-Release\setup
copy /Y ..\Release\application.exe .
windeployqt application.exe
pause

Допустим, вы хотели иметь несколько портативных CGAL-Demos. Таким образом, у вас будет папка "CGAL", и в ней 1 подпапка с именем "lib": все (общие) файлы поддержки для любых программ в CGAL-папке находятся здесь. В нашем примере это будет Dll-Download: просто распакуйте в каталог "lib". Чем дальше вы прокручиваете страницу демо, тем более впечатляющим является контент. В моем случае демо-многогранник показался мне правильным. Если это работает на моем ноутбуке 10+ лет, я впечатлен. Поэтому я создал папку "demo" в "CGAL"-директории рядом с "lib". Теперь создайте.cmd-файл в этой папке. Я назвал мой "Многогранник. Cmd". Итак, у нас есть структура каталогов, подобная этой:

 CGAL - the bag for all the goodies
  lib - all libraries for all CGAL-packages
 demo - all the demos I'm interested in
[...] - certainly some other collections, several apps per folder...
Polyhedron.cmd - and a little script for every Qt-exe to make it truly portable.

В этом небольшом примере "Polyhedron.cmd" содержит следующий текст:

@echo off
set "me=%~dp0"
set PATH=%me%lib
set "QT_PLUGIN_PATH=%me%lib\plugins"
start /b "CGAL Polyhedron Demo" "%me%demo\polyhedron\polyhedron_3.exe"

Очевидно, что все сценарии могут быть одинаковыми, кроме последней строки. Единственное предостережение: "DOS-окно" остается открытым до тех пор, пока вы используете реальную программу. Закройте окно оболочки, и вы также убьете *.exe. Всякий раз, когда вы копируете папку "CGAL", так как странный "%~dp0"-wriggle представляет полный путь к *.cmd-файлу, который мы начали, с завершающим "\". Так что "%me%lib" - это всегда полный путь к реальной библиотеке (в моем случае "CGAL\lib"). Следующие 2 строки сообщают Qt, где находятся его файлы времени выполнения. Это будет как минимум файл "qwindows.dll" для программ Windows-Qt плюс любое количество *.dll. Если я правильно помню, в библиотеке Dll (по крайней мере, когда я ее скачал) была небольшая "ошибка", так как она содержит каталог "platform" с qwindows.dll. Поэтому, когда вы открываете каталог lib, вам нужно создать папку "плагины" рядом с "платформами", а затем перейти в "плагины". Если Qt-приложение, любое Qt-приложение, не находит "qwindows.dll", оно не может найти "windows". И он ожидает это в каталоге с именем "platform" в каталоге "plugins", о котором он должен сообщить ОС, на которой она работает... и если QT_PLUGIN_PATH не точно указывает на все вспомогательные файлы необходимо, чтобы некоторые Qt-программы по-прежнему работали без проб. И некоторые жалуются на отсутствие *.dll, которые вы никогда не слышали...

Используйте этот пакетный файл: RunWithQt.bat

@echo off
set QTDIR=C:\Qt\Qt5.1.1\5.1.1\msvc2012\bin
set QT_QPA_PLATFORM_PLUGIN_PATH=%QTDIR%\plugins\platforms\
start %1
  • чтобы использовать его, перетащите файл gui.exe и поместите его в RunWithQt.bat в проводнике,
  • или позвоните по телефону RunWithQt gui.exe из командной строки

Для платформы MinGW, и если вы компилируете цель Debug вручную, написанным на CMakeLists.txt, вы должны также добавить qwindows.dll в каталог платформы. Исполняемый файл windeployqt хорошо работает, но, похоже, по какой-то странной причине сборка CMake также нуждается в варианте выпуска. Таким образом, будет лучше иметь как qwindows.dll, так и qwindowsd.dll в каталоге вашей платформы. Я не заметил такого же странного результата при импорте проекта CMake в QtCreator и последующем запуске процедуры сборки. Компиляция в командной строке проекта CMake, по-видимому, вызывает зависимость qwindows.dll либо в том случае, если установлена ​​правильная для цели Debug (qwindowsd.dll)

Если у вас установлена ​​Anaconda, я рекомендую вам удалить ее и попробовать установить пакет python из исходного кода. Я исправил эту проблему следующим образом.

Я столкнулся с той же ошибкой и решил ее другим способом, чем те, которые упоминались в других сообщениях. Надеюсь, это поможет будущим читателям.

СТРОИТЬ:

Windows 10 (64-разрядная версия)Minicoda (с использованием python 3.9.4) (pkgs взяты из канала conda-forge)pyqt 5.12.3

Мой сценарий:

Я создавал приложение с графическим интерфейсом для некоторых встроенных работ. У меня было две машины, которые использовались для разработки (та же ОС и архитектура), у одной было нулевое подключение к Интернету. После упаковки моей среды и установки на автономном компьютере я столкнулся с ошибкой, которую вы получили.

Решение:

найдите файл qt.conf в среде conda. для меня: C: \ Users \"name"\miniconda3\envs\"env_name"\qt.conf

Убедитесь, что пути правильные. Мне нужно было обновить «имя», так как оно осталось от старой машины.

Надеюсь, это кому-то поможет.

Я получил ошибку, когда Pycharm пытался запустить Matplot. Решение, которое сработало для меня, заключалось в установке каталога Anaconda3 \ Library \ plugins (например: c: \ Program files \ Anaconda3 \ Library \ plugins) в качестве переменной среды «QT_PLUGIN_PATH». Чтобы установить это, вы должны перейти в Панель управления / Система / Расширенные настройки системы / Переменные среды.

Говоря в основном о платформе Windows

Столкнулся с той же проблемой при попытке отладить сборку приложения с использованием установленной библиотеки, в то время как моя сборка приложения использовала cmake. Были проблемы в течение нескольких часов, пока не нашли решение. Самый простой способ — сделать следующее:

  • в папке сборки найдите папку, в которой находится окончательный исполняемый файл.

  • в этой папке вы найдете несколько библиотек, например .

  • обратите внимание на то, есть ли в имени файла библиотеки суффикс, т.е. Qt6Cored.dllвместо Qt6Core.dll

  • в vcpkgпапка, у вас есть 2 варианта

    1. ./installed/x64-windows/Qt6/plugins/platforms
    2. ./installed/x64-windows/debug/Qt6/plugins/platforms
  • если dприсутствует суффикс, скопируйте содержимое ../debug/..папку (иначе другую) в platformsпапку в той же папке, где ваш исполняемый файл и Qtнаходятся библиотеки (если такой папки нет, создайте самостоятельно).

Можно как-то автоматизировать этот процесс. Оставив эту задачу вам. Если я сделаю это самостоятельно, обновлю ответ.

Редактировать

Если вы используете CMakeListsВы можете попробовать это. Добавьте следующее в ваше приложение CMakeLists.txt

      # assuming your target's name is app

if(WIN32)
    add_custom_command(
        TARGET app POST_BUILD
        COMMAND ${CMAKE_COMMAND} -E copy_directory
            ${Qt6_DIR}/../../$<$<CONFIG:Debug>:debug/>Qt6/plugins/platforms/
            $<TARGET_FILE_DIR:app>/platforms/
    )
endif()

Параметр QT_PLUGIN_PATH переменная env для <...>/plugins каталог также работал у меня.

У меня была такая же проблема с запуском приложения QT5 в Windows 10 (VS2019). Моя ошибка была

.. \ Debug \ Qt5Cored.dll
Модуль: 5.14.1
Файл: kernel \ qguiapplication.cpp
Строка: 1249

Это приложение не удалось запустить, потому что не удалось инициализировать подключаемый модуль платформы Qt.
Переустановка приложения может решить проблему.

Решение

Поскольку я использовал QT msvc2017, я скопировал папки плагинов из папки «C: \ Qt \ Qt5.14.1 \ 5.14.1 \ msvc2017 \ plugins» в двоичную папку.

это сработало.

Затем проверьте окно вывода Visual Studio и определите библиотеки DLL, загруженные из папки плагина, и удалите ненужные библиотеки DLL.

Другие вопросы по тегам