web-dev-qa-db-ja.com

QTプラットフォームプラグイン「windows」を見つけられなかったか、ロードできなかったため、アプリケーションを開始できませんでした

スタックオーバーフローに関連すると思われるすべての質問に目を通しましたが、解決策はありません。

私はこのセットアップでQtアプリケーションを構築しています:

  • Windows 7 Professional x64
  • Visual Studio 2012
  • configure -developer-build -debug-and-release -opensource -nomake examples -nomake tests -platform win32-msvc2012 -no-openglで構築されたQt 5.2.0
  • プロジェクトは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

(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の問題を修正する方法はありますか?

25
gollumullog

私は自分の問題を解決しましたが、違いが何であるかはわかりません:

すべてのdllをqtディレクトリからアプリケーションディレクトリの./および./platformsの両方にコピーしました。

アプリケーションはエラーを通過しましたが、その後クラッシュしました。

VERSION.dllがクラッシュを引き起こしていたため(依存関係ウォーカーで記録)、両方の場所から削除しました。

アプリケーションが起動したので、不要なdllをすべて体系的に削除しました。

これにより、元々の状態に戻りました。

その後、アプリケーションをアンインストールして再インストールし(./platforms/qwindows.dllファイルのみを残して)、アプリケーションは正常に動作します。

したがって、プラットフォームディレクトリにqwindows.dllの誤ったバージョンがあったと推測できます。

1
gollumullog

このエラーは、プログラムがqwindows.dllを見つけられないために発生します

qwindows.dllplatformsという名前のフォルダーになければならないため、実行可能ファイルからdllへのパスはplatforms/qwindows.dllです。

私の場合、これでは十分ではありませんでした。また、main()の先頭に次の行を追加する必要がありました

QCoreApplication::addLibraryPath("./");

その後、すべてが機能しました。

24
Jan Moritz

この問題とその解決方法を知りました。

  1. 必要なdllの正確なパスを確認するには、dependency walker( http://www.dependencywalker.com/ )を使用しました。 QtCreatorとQTフレームワークの両方に同じdllがあり、使用されているものを正確に特定する必要があるため、試してください。アプリと同じフォルダーに必要なすべてのdllをコピーしました。

  2. QTフレームワーク/ pluginsからフォルダープラットフォームをコピーし、アプリと同じフォルダーにコピーしました。これで、アプリにはすべてのdllを含むplugin/platform /フォルダーも含まれました

  3. そして、私の場合の最も重要なステップは、アプリと同じフォルダーにqt.confという名前のファイルを作成することです。このファイルには、プラグインへのパスが含まれている必要があります。私のqt.confファイルには以下が含まれています。

    [パス]
    ライブラリ= ../lib/qtcreator
    Plugins = plugins
    Imports = imports
    Qml2Imports = qml

9
Lucian

Qt binパスはシステムPATH変数にあるため、アプリケーションはホストシステムで実行できます。

Qtがインストールされていないターゲットマシンでアプリケーションを実行できるように、WindowsにQtアプリケーションを展開するための標準Qtツール windeployqt があります。

そのツールはQt DLL依存関係を処理し、platforms\qwindows.dllのコピーを作成し、Dependency Walkerで検出できないライブラリのコピーも作成します。 、画像プラグインおよびその他のDLLが実行時にロードされるため。

環境binにQt 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再配布可能ファイルにも問題がある可能性がありますが、それらは個別に展開し、システムごとに1回インストールする必要があります。

OpenSSLなど、一部のサードパーティライブラリのみを使用する場合は、手動でコピーする必要があります。

8
Orest Hera

同じ問題がありました。「QTプラットフォームプラグイン「windows」を見つけることができなかったため、アプリケーションを起動できませんでした。app.exe(アプリの実行可能ファイル)フォルダーに以下のファイルをコピーして、

Qt5Core.dll、Qt5Gui.dll、Qt5Widgets.dll、およびqminimal.dll、qoffscreen.dll、qwindows.dllを含む「プラットフォーム」ディレクトリ。

enter image description here

enter image description here

これが誰かを助けることを願っています

5
Amar

この問題は、アプリでエンコードされているqwindows.dllの検索パスにQtをインストールしたパスが含まれている場合にalsoが発生する可能性があることに注意してください。次のシナリオを検討してください。

  1. Qtをc:\Qt\...にインストールします
  2. アプリを開発し、他の場所に正しく展開します。
  3. サブディレクトリにqwindows.dllが含まれているため、どのコンピューターでも適切に実行されます。
  4. ローカルQtを新しいバージョンにアップグレードします。
  5. アプリをもう一度実行しようとしました。

qwindows.dllc:\Qt\...が見つかったため、結果はこのエラーになりますbeforeローカルディレクトリにあり、それと互換性がありません。とてもうるさい。

解決策は、exeファイルと同じディレクトリにqt.confファイルを配置することです。これを回避する方法がわかりません。ツールwindeployqt.exeを使用してアプリを展開した場合、platformsというサブディレクトリがあるため、これで十分です。

[Paths]
Plugins=.
3
Timmmm

将来この問題を抱えている人々のために-私は汚い小さなハックを持っています、私のために働きました。ご自身の責任でお試しください。

初期展開(クイックおよびダーティ)のすべての手順に従ってください[ http://wiki.qt.io/Deploy_an_Application_on_Windows]

  1. Qt Creatorを閉じます。
  2. 次をC:\ Deployment \にコピーします。MyApp.exeのリリースバージョンC:\ Qt\5.2.1\mingw48_32\bin \のすべての.dllファイルC:\ Qt\5.2.1\mingw48_32 \のすべてのフォルダープラグイン\
  3. (QMLを使用した場合)C:\ Qt\5.2.1\mingw48_32\qml \のすべてのフォルダーC:\ Qt \の名前をC:\ QtHidden \に変更します(これにより、PCがクリーンな環境になります。 「Qtがインストールされていません」。
  4. C:\ Deployment\MyApp.exeを起動します。

ハックのために-

  1. 安全のためにフォルダーを複製する
  2. ファイルが/ cat/Deploymentにあった場合は、/ catに移動します
  3. 次に、.exeの実行中にDeploymentフォルダーを削除します。
  4. 特定のファイルを削除できないことがわかりますので、Skip(またはすべてスキップ)と言います
  5. 残っているのは、.exeが実際に使用していて削除できなかったすべての.dllファイルのリストです。すべてのファイルと保持する必要があるファイルのみのリストです。

ここで.exeファイルを閉じることができます。正常にデプロイされているかどうかを確認するには、インストールしたフォルダーに移動し、C:/ Qtと言い、名前をC:/ NotQtに変更します(基本的にQtをシステムから見えなくします)。現在動作している場合は、他のシステムに頻繁にデプロイされます。

2
vc669

私にとっては、私は 設定する必要がありますQT_QPA_PLATFORM_PLUGIN_PATHをプラットフォームのディレクトリに移動すると、動作しました。

価値のあることは、このソリューションも GitHubで説明 でした。

1
RuiDC

以下を追加しない限り、通常はプラットフォームにあるはずのqwindows.dllがありません。

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

これを行わずにqwindows.dllを別の場所に置くと、QtはPATHでDLLを検索しますが、これにはかなりの時間がかかります(10秒-数分)!

1
Ruud van Gaal

同じ問題が発生しました。1。VS2010で実行できます。 2.次のようなファイルがあるフォルダーで実行できます:app.exe\platforms\qwindows.dll ...

  1. しかし、開発中のOSと同じOSのクリーンなマシンでqwindowsをロードできませんでした。

プラットフォームフォルダーをプラグインに移動するだけで解決しました:app.exe plugins\platforms\qwindows.dll


プラス:qwindows.dllは、プラグインインターフェースでクエリされるため、好きな名前に変更できます:qt_plugin_query_metadata()

1
chime

QTプラグインのプラットフォームディレクトリを指す環境変数QT_QPA_PLATFORM_PLUGIN_PATHをシステムに追加する必要があります。私の場合、AnacondaとPySide2を使用していました。したがって、私のディレクトリパスはC:\ProgramData\Anaconda3\envs\cv\Lib\site-packages\PySide2\pluginsでした。これにより、すべてのQTプロジェクトの問題が修正されます。それ以外の場合は、プラットフォームディレクトリをすべてのQTプロジェクトにコピーします。

0
paarandika

上記のすべてを試してみました-Qtフォルダーにメインのapps dllがなかったからだとわかりました

  • Qt5Core.dll
  • Qt5Widgets.dll
0
Rob Hirst

アプリケーションのexeフォルダーにqt.confを配置することでこれを修正しました。

[Paths]
Prefix=C:/Qt/Qt5.11.2/5.11.2/msvc2017

どこで:

  1. C:\Qt\Qt5.11.2\5.11.2\msvc2017にカスタムQtキットをインストールしました
  2. qt.confは、Prefixプロパティを介してカスタムキットの場所をアプリに通知します。バックスラッシュではなくスラッシュを使用してください(!)
  3. また、オプションで、QtキットのbinフォルダーがPATH環境変数に含まれています

qt.confファイルでPrefixを定義すると、アプリの起動時にqwindows.dllプラットフォームプラグインを見つけることができます。

0
Stephen Quan