web-dev-qa-db-ja.com

Qt 5.1.1:プラットフォームプラグイン "windows"が見つけられないためにアプリケーションが起動しませんでした


編集:何人かの人々が私の質問を重複としてマークし始めました。私がこの質問をしたときに、似たような質問がたくさん存在していたことを忘れないでください(例えば以下のリストを参照)。しかし、これらの答えのどれも私の問題を解決しませんでした。長い検索の後、私はコメントを見つけました。これは、見つからないlibを指しているすべてのユーザーによって無視されていました。今、何ヶ月も経って、コメントは答えに変更されました。しかし、私がmsyselfによってこの質問に答えたとき、私は直接解決策を提供することによって他の人々を助けることを意図しました。これは忘れてはいけません、そして今のところ私の答えは多くの人々を助けました。したがって、私の質問は間違いなく重複していません。 ところで:上に提供されたリンク内の受け入れられた答えは問題を解決しません


はい、私は検索を使用しました:

プラットフォームプラグイン "windows"の読み込みに失敗しました。利用可能なプラットフォームは次のとおりです:エラー

Visual StudioからのQt C++アプリケーションの展開qwindows.dllエラー

プラットフォームプラグイン "windows"の読み込みに失敗しました。利用可能なプラットフォームはwindows、minimal

しかし、私の場合、問題はまだ解決しません。私はVisual Studio 2012でQt 5.1.1を使用しており、Windows 7上でQt Creator 2.8.1を使用して私のアプリケーションを開発しました。アプリケーションは "Release"モードでコンパイルされており、Qt Creatorで直接起動すれば実行できます。

ただし、 "release"フォルダから開始すると、次のようなメッセージが表示されます。

Qtプラットフォームプラグイン "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。他のユーザーと同じように、名前を "platform"に変更しても問題ありません。 Qtが「プラットフォームプラグインウィンドウ」を見つけられないのですが、私の間違いはどこにありますか?

110
Anonymous

さて、ここに掲載されているように https://stackoverflow.com/a/17271172/1458552 他のユーザーの注目を集めることなく:

libEGL.dllが見つかりませんでした。アプリケーションを起動しようとしたときにこれが報告されていなくても(Qt5Gui.dllなどの他のすべての* .dllsが報告されていた)。

63
Anonymous

私は私のexeファイルの場所の隣にplatformディレクトリを作成し、その中にqwindows.dllを置きましたが、私はまだ "プラットフォームプラグインの読み込みに失敗しました" windows "を受け取りました。

C:\ Qt\Qt 5.1.1\Tools\QtCreator\bin\plugins\platformからqwindows.dllをコピーしましたが、これは正しい場所ではありません。 Qt Creatorで実行しているときのデバッグログを調べたところ、デバッガで実行したときに私のアプリはC:\ Qt\Qt5.1.1\5.1.1\mingw48_32\plugins \プラットフォームで検索されていました。

C:\ Qt\Qt5.1.1\5.1.1\mingw48_32\plugins \プラットフォームからコピーしたとき、すべてうまくいきました。

34
Brandon

私は予想外の直感的な修正を見つけました。アプリケーションのリリースに使用したコンパイラのbinにあるqwindows.dllをコピーして「platform」という名前のフォルダに貼り付けると、そのフォルダをアプリケーションと同じディレクトリに移動して、魔法のように動作させることができます。

また、Qtには、デプロイされた実行可能ファイルのフォルダーにすべての依存関係(qwindows.dllやlibEGL.dllなど)を追加するプラットフォームコンソールアプリケーションが付属しています。 Windows用のアプリケーションはwindeployqtと呼ばれており、ドキュメントはここで見つけることができます http://doc.qt.io/qt-5/windows-deployment.html

20
CrippledTable

QT_QPA_PLATFORM_PLUGIN_PATH環境変数を%QTDIR%\ plugins\platform \ に設定するとうまくいきました

ここで ここで そしてここでも言及されました。

12
Jim G.

私はこれに遭遇し、私が見つけることができた答えのどれも私のためにそれを修正しませんでした。

私の同僚は、C:\ Qt\Qt5.6.0\5.6\msvc2015\pluginsにある自分のマシンにQt(5.6.0)をインストールしています。
同じ場所に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ファイルを使用します。

これを回避するために、私はそれがQt5Core.dllの中のパスを見る前に 'platform'サブフォルダのためにexeの隣に見ることを強制するように思われるアプリケーションに次のコード行を追加しました。

QCoreApplication::addLibraryPath(".");

このようにQApplicationを呼び出す前に、mainメソッドに上記の行を追加しました。

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

ディレクトリplatformsを作成し、それにqwindows.dllをコピーします。platformsapp.exeは同じディレクトリにあります。

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

フォルダ構造+ app.exe + platforms\qwindows.dll

5
KunMing Xie

私は別の解決策を見つけました。 appフォルダにqt.confを作成します。

[Paths]
Prefix = .

そして、pluginsフォルダをappフォルダにコピーしてください。

3
Peter Quiring

これらの答えのほとんどには良い(正しい)情報が含まれていますが、私の場合、まだ足りないものがありました。

私のアプリはライブラリ(dll)として構築されており、Qt以外のアプリケーションによって呼び出されます。私はwindeployqt.exeを使ってQtのdll、プラットフォーム、プラグインなどをインストールディレクトリに設定しましたが、それでもプラットフォームを見つけることができませんでした。いくつかの実験の後、私はアプリケーションの作業ディレクトリが別のフォルダに設定されていることに気付きました。それで、私はdllがGetModuleHandleExAを使って「生きた」ディレクトリをつかみ、実行時にQtライブラリパスにそのディレクトリを使って追加しました。

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

これは私のために働きました。

2
Jacob Robbins

QT 5.6、Anaconda 4.3.23、python 3.5.2、およびpyinstaller 3.3を使用しているときにこの問題が発生しました。私はQTcreatorを使って開発されたインターフェースでpythonプログラムを作成しましたが、それを他のコンピュータにデプロイしなければならなかったので、pyinstallerを使って実行可能ファイルを作る必要がありました。

以下の環境変数を設定すれば、私のコンピュータでは問題が解決したことがわかりました。

QT_QPA_PLATFORM_PLUGIN_PATH:%QTDIR%\ plugins\platform \

QTDIR:C:\ Miniconda3\pkgs\qt-5.6.2-vc14_3 \ライブラリ

しかし、この解決策は、condaとqtがそれらのフォルダにインストールされている私のPCでしか機能しませんでした。

これを解決し、実行可能ファイルを任意のコンピュータで機能させるには、 "。spec"(pyinstallerによって最初に生成されたファイル)を編集して、次の行を含める必要がありました。

datas = [( 'C:\ Miniconda3\pkgs\qt-5.6.2-vc14_3 \ライブラリ\ plugins \プラットフォーム* .dll'、 'プラットフォーム')、]

この解決策は、Jim G.とCrippledTableの回答に基づいています。

私は同じ問題を抱えていて、いくつかのことを適用することによってそれを解決しました。 1つ目は、Qtを使ったプログラムの場合です。

"私の場合は" "C:\ Qt\Qt5.10.0\5.10.0\msvc2017_64\plugins"フォルダに他のフォルダがありますが、そのうちのひとつが "プラットフォーム"です。その "platform"フォルダは、あなたの.exe実行ファイルの隣にコピーされます。さて、あなたがエラー0xc000007dを得た場合、それは32ビットまたは64である可能性があるので、あったバージョンをコピーしなかったということです。

エラーが続くと、ライブラリが足りなくなります。 "依存関係ウォーカー"プログラムを使用すると、不足しているフォルダのいくつかを検出することができます。確かにそれはあなたがNVIDIA .dllを必要とすることをあなたに示すでしょう、そしてそれはあなたに場所を告げます。

別の方法として、「Dependency Walker」を使用する代わりに、実行可能ファイルの横にある「C:\ Windows\System32」フォルダからすべての.dllをコピーします。あなたの.exeを実行し、すべてがうまくロードされるのであれば、あなたがあなたが必要としない、または使用するdllライブラリに占有されたスペースを持っていないなら。あなたのプログラムでそれらの.dllが使用されているのであれば、システムはあなたが消去させてしまうことはないでしょう。

この解決策があなたに役立つことを願っています。

オペレーティングシステムが64ビットの場合、ライブラリはSystem32フォルダに保存され、オペレーティングシステムが32ビットの場合、ライブラリはSystem32フォルダに保存されます。 64ビットコンピュータで32ビットであるプログラムとの互換性の問題が何もないようにこれが発生します。 SysWOW64フォルダには、バックアップとして32ビットファイルが含まれています。

1
Ire

Anacondaがインストールされている場合はアンインストールしてソースからpythonパッケージをインストールしてみることをお勧めします。この方法でこの問題を解決しました

0
Soberbia coding

私にとっての解決策はPATH変数を修正することでした。最初のパスの1つとしてAnaconda3\Library\binがありました。このディレクトリはsome Qtライブラリを含みますが、全部ではありません。どうやら、それは問題です。 C:\ Programs\Qt\5.12.3\msvc2017_64\binをPATHの前に移動すると問題が解決しました。

0
Jann Poppinga

アプリケーションqtbase/bin/windeployqt.exeあなたのアプリケーションを自動的にデプロイします。 envirenmentvariablesを正しく設定してプロンプトを起動すると、現在のディレクトリにデプロイされます。あなたはスクリプトの例を見つける:

@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
0
MyGeertRo

このバッチファイルを使用してください: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を呼び出す
0

MinGWプラットフォームの場合、および手動で作成したCMakeLists.txtによってデバッグターゲットをコンパイルする場合は、プラットフォームディレクトリにqwindows.dllを追加する必要があります。 windeployqt実行ファイルはうまく機能しますが、奇妙な理由でCMakeのビルドにもreleaseの変種が必要になるようです。要約すると、プラットフォームディレクトリにqwindows.dllとqwindowsd.dllの両方を含める方が良いでしょう。私はQtCreatorにCMakeプロジェクトをインポートしてからビルド手順を実行したときに同じ奇妙な結果に気付きませんでした。デバッグターゲットに正しいものが設定されている場合(qwindowsd.dll)、CMakeプロジェクトをコマンドラインでコンパイルするとqwindows.dll依存関係が引き起こされるようです。

0
Michal Turlik

たとえば、いくつかの CGAL-Demos 移植性が必要でした。つまり、 "CGAL"というフォルダがあり、その中に "lib"という名前の1つのサブフォルダがあります。CGALフォルダ内のすべてのプログラム用のall(共通)support-dllがここにあります。私たちの例では、これは Dll-Download :になります。単に "lib"ディレクトリに解凍してください。 demos-page を下にスクロールすると、コンテンツがより印象的になります。私の場合は、 polyhedron-demo が正しいようです。これが私の10歳以上のあなたのノートブックで実行されるならば、私は感動します。そこで私は "lib"と並んで "CGAL"ディレクトリに "demo"フォルダを作成しました。そのフォルダに.cmdファイルを作成します。私は私の名前を "Polyhedron.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に "ランタイム"ファイルがどこにあるかを伝えます。これは、少なくともWindows-Qtプログラム用のファイル "qwindows.dll"と任意の数の* .dllです。私が正しく覚えているなら、Dllライブラリ(少なくともそれをダウンロードしたとき)はそれにqwindows.dllが入った "platform"ディレクトリを含んでいるので少し "バグ"がありました。そのため、libディレクトリを開くときは、「platform」の隣に「plugins」というフォルダを作成し、を「plugins」に移動する必要があります。 Qt-app、anyQt-appが "qwindows.dll"を見つけられない場合は、 "windows"を見つけることができません。そして、それは "plugins"ディレクトリの中の "platform"という名前のディレクトリにあることを期待しています。それはOSによって実行されていなければなりません...必要、いくつかのQtプログラムはまだ問題なく実行されます。そして、あなたが聞いたことがない* .dllがないことについて不平を言う人もいます...

0
Thomas Sturm