web-dev-qa-db-ja.com

Qt5静的ビルドは、プラットフォームプラグイン「windows」のロードに失敗します

Visual Studio 2012を使用して、WindowsでQtアプリケーションを作成しています。 QtアドインとカスタムビルドのstaticQt 5.0.2の配布を使用します。私は恐ろしい"Failed to load platform plugin windows"アプリケーションを実行するたびにエラーが発生します。リンカーの入力に次を追加しました。

imm32.lib
winmm.lib
Ws2_32.lib
qtmaind.lib
Qt5Cored.lib
Qt5Guid.lib
Qt5Widgetsd.lib

最初は、「qwindowsd.lib」もリストに追加する必要があると考えましたが、それでも問題は解決しませんでした。アプリケーションを実行するために何をする必要がありますか?

31
Dave

解決しました。 this のおかげで、すべてを機能させることができました。次のライブラリを追加しました。

opengl32.lib
Qt5PlatformSupport.lib
qwindows.lib

また、次のコードを追加しました。

#include <QtPlugin>
Q_IMPORT_PLUGIN (QWindowsIntegrationPlugin);
25
Dave

動的ビルドの場合のみ:qwindows.dllを次のディレクトリに移動してください。

yourapp.exe
Qt5Core.dll
...
platforms/qwindows.dll
...

Pluginsディレクトリが欠落していることに注意してください! QT_BASE /.../ plugins/*から必要なすべてのフォルダーをバイナリと一緒に直接配置します。ところで:libEGL.dllは必要ありませんでしたが、私のアプリケーションにはほとんどGUIがありません。

私のソース: http://qt-project.org/forums/viewthread/27056/#122588

27
adler

QtのMinGWバージョン(静的ではない)で同じエラーが発生しました:「プラットフォームプラグインウィンドウの読み込みに失敗しました」。

私にとっての解決策は、DLLを追加することでしたlibEGL.dllおよびlibEGLd.dll

12
dagur

環境変数を作成することもできます:

QT_QPA_PLATFORM_PLUGIN_PATH=<QT_BASE>\plugins\platforms

私の場合はQT_QPA_PLATFORM_PLUGIN_PATH=f:\Qt\5\5.4\msvc2013_opengl\plugins\platforms

したがって、インストール/コピーを避けるqwindows.dll開発中(ディスクスペースを節約するために!?)。

このソリューションは、 GitHub および here にも言及されていました。

編集:申し訳ありませんが、これは静的ビルドでは効果的ではありません。ただし、ここでは[〜#〜] a [〜#〜]のままにします。

7
G.Vanem

同様の問題がありました。

QT 5.2+にはwindeployq.exeがあることがわかりました

QT_DIRECTORY\5.2 ...\bin\windeployq.exe

プロジェクトのディレクトリ(アプリケーションの.exeがある場所)で使用します。そしてほら!すべてを自動的にリンクし、デプロイする準備ができました!

DLL、プラグインなどを自動的に取得します!

6
Yves Lange

別の方法は、qtbase/plugins/platformsディレクトリをDebug/Releaseディレクトリに移動して、qwindowsd.dllまたはqwindows.dll 適切に。

5
darrenp

解決策は、anacondaとpythonを使用してqtデザイナーを使用してGUIを作成し、anaconda、pkgs、qt.xxx、library、pluginsに移動してから、プラットフォームフォルダーをビルドにコピーする場合です。 program.exeが含まれるフォルダー

1
Zerizer hichem

まさにこの問題。解決策は、デバッグ出力でQtを確認することです。このウィンドウは、ロードするすべてのDLLを示します。これらは、配布exeフォルダーに必要な場合があります。

0
user2793449

VS2015とQt 5.9.3のバージョンで同じエラーが発生しました

Qt5Cored.dllとQt5Core.dll(アプリケーションのexe)をQtディレクトリの同じDLLに置き換えることでエラーを解決しました

0
Jum