Qt5を使用するLinux用のアプリケーションを作成しました。
しかし、Qt SDKがインストールされていないLinuxで起動しようとすると、コンソールの出力は次のようになります。
プラットフォームプラグイン「xcb」の読み込みに失敗しました。利用可能なプラットフォームは次のとおりです。
どうすれば修正できますか?プラグインファイルをコピーする必要がありますか? Qt5をインストールした状態でubuntuを使用しているが、Qtディレクトリの名前を変更すると、同じ問題が発生します。そのため、Qtディレクトリのファイルを使用します...
更新:ファイルlibqxcb.soを使用してapp dir "platforms"フォルダーに作成すると、アプリはまだ起動しませんが、エラーメッセージが変わります。
プラットフォームプラグイン「xcb」の読み込みに失敗しました。利用可能なプラットフォームは次のとおりです。
xcb
これはどのように起こりますか?プラットフォームプラグインはどのように使用できますが、ロードできませんか?
共有ライブラリの依存関係を表示するには、ldd(man ldd)を使用します。これをlibqxcb.soで実行する
.../platforms$ ldd libqxcb.so
xcbは、libQt5Core.so.5およびlibQt5Gui.so.5(および他の多くのシステムライブラリ)に加えて、libQt5DBus.so.5に依存することを示しています。 libQt5DBus.so.5を共有ライブラリのコレクションに追加すると、先に進む準備ができているはずです。
以前に投稿されたように、アプリケーションをデプロイするときにプラットフォームプラグインをインストールする必要があります。物事をどのようにデプロイするかに応じて、プラットフォームプラグイン(例:platforms/plugins/libqxcb.so)が実行時にどこに機能するかをアプリケーションに伝えるための2つの方法があります。
最初の方法は、QT_QPA_PLATFORM_PLUGIN_PATH変数を使用してディレクトリへのパスをエクスポートすることです。
QT_QPA_PLATFORM_PLUGIN_PATH=path/to/plugins ./my_qt_app
または
export QT_QPA_PLATFORM_PLUGIN_PATH=path/to/plugins
./my_qt_app
私が好むもう1つのオプションは、実行可能ファイルと同じディレクトリにqt.confファイルを作成することです。その内容は次のとおりです。
[Paths]
Plugins=/path/to/plugins
これに関する詳細情報は here および at qt.confを使用 にあります。
Qt 5.5がプリインストールされているUbuntu 16.04 LTSで、Qt 5.7でコンパイルされたバイナリを起動しようとしました。予想通り、そのままでは機能しませんでした。
最初に、ここで提案されているようにldd
でバイナリ自体を検査し、「見つからない」依存関係をすべて満たしました。次に、この悪名高いThis application failed to start because it could not find or load the Qt platform plugin "xcb"
エラーがスローされました。
これを解決するためにLinuxで何をすべきか
QtがXCBライブラリを探す場所であるため、最初に、platforms
ディレクトリを作成する必要があります。 libqxcb.so
をコピーします。他の答えの著者がこれに言及しなかったのはなぜだろう。
次に、QT_DEBUG_PLUGINS=1
環境変数を設定してバイナリを実行し、libqxcb.so
のどの依存関係が満たされていないかを確認します。 (承認済みの回答で提案されているように、ldd
を使用することもできます)。
コマンド出力は次のようになります。
me@xerus:/media/sf_Qt/Package$ LD_LIBRARY_PATH=. QT_DEBUG_PLUGINS=1 ./Binary
QFactoryLoader::QFactoryLoader() checking directory path "/media/sf_Qt/Package/platforms" ...
QFactoryLoader::QFactoryLoader() looking at "/media/sf_Qt/Package/platforms/libqxcb.so"
Found metadata in lib /media/sf_Qt/Package/platforms/libqxcb.so, metadata=
{
"IID": "org.qt-project.Qt.QPA.QPlatformIntegrationFactoryInterface.5.3",
"MetaData": {
"Keys": [
"xcb"
]
},
"className": "QXcbIntegrationPlugin",
"debug": false,
"version": 329472
}
Got keys from plugin meta data ("xcb")
loaded library "/media/sf_Qt/Package/platforms/libqxcb.so"
QLibraryPrivate::loadPlugin failed on "/media/sf_Qt/Package/platforms/libqxcb.so" : "Cannot load library /media/sf_Qt/Package/platforms/libqxcb.so: (/usr/lib/x86_64-linux-gnu/libQt5DBus.so.5: version `Qt_5' not found (required by ./libQt5XcbQpa.so.5))"
This application failed to start because it could not find or load the Qt platform plugin "xcb"
in "".
Available platform plugins are: xcb.
Reinstalling the application may fix this problem.
Aborted (core dumped)
失敗したlibQt5DBus.so.5
ライブラリに注意してください。ライブラリパスにコピーします。私の場合は、バイナリが存在するディレクトリと同じディレクトリでした(したがってLD_LIBRARY_PATH=.
)。すべての依存関係が満たされるまで、このプロセスを繰り返します。
追伸QT_DEBUG_PLUGINS=1
の- この回答 の著者に感謝します。
Ubuntu 16.04 64ビット。私は明らかに理由もなく問題を抱えた。 VideoLanインスタンスで映画を見る前夜、その夜、VideoLanで別の映画を見たいと思います。 VLCは質問へのエラーのために実行したくありませんでした。私は少しグーグルで、それが私の問題を解決した解決策を見つけました:これからは、VLCは以前と同じように実行可能です。解決策はこのコマンドです:
Sudo ln -sf /usr/lib/x86_64-linux-gnu/qt5/plugins/platforms/ /usr/bin/
その結果を説明することはできませんが、シンボリックリンクが欠落していることはわかっています。
バージョン5以降、Qtは プラットフォーム抽象化システム(QPA) を使用して、基盤となるプラットフォームから抽象化します。
各プラットフォームの実装はプラグインによって提供されます。 X11の場合、XCBプラグインです。依存関係の詳細については、 X11要件のQt を参照してください。
各回答の主要部分を試しましたが、役に立ちませんでした。最終的にそれを修正したのは、次の環境変数をエクスポートすることでした:
LD_LIBRARY_PATH=/usr/local/lib:~/Qt/5.9.1/gcc_64/lib
QT_QPA_PLATFORM_PLUGIN_PATH=~/Qt/5.9.1/gcc_64/plugins/
おそらくこれが役立ちます。 Ubuntu 18.04を使用していて、Kritaをインストールしたときにppaメソッドを使用しています。私はこのエラーを受け取りました:
このアプリケーションは、「」内のQtプラットフォームプラグイン「xcb」を検出またはロードできなかったため、起動に失敗しました。
使用可能なプラットフォームプラグインは、linuxfb、minimal、minimalegl、offscreen、wayland-egl、wayland、xcbです。
アプリケーションを再インストールすると、この問題が解決する場合があります。中止
私はこのスレッドや他のWebで見つけたすべての解決策を試してみましたが、成功しませんでした。
最後に、著者が次の簡単なコマンドを使用してqt5のデバッグをアクティブ化することができると言及している投稿を見つけました。
export QT_DEBUG_PLUGINS=1
このコマンドを追加した後、もう一度実行しますkrita原因がわかったときに同じエラーが発生しました。
libxcb-xinerama.so.0:共有オブジェクトファイルを開けません:そのようなファイルまたはディレクトリはありません。
このエラーにより、「xcb」が正しくロードできなくなります。したがって、ソリューションは「libxcb-xinerama.so.0」を正しくインストールしますか?ただし、コマンドを実行すると:
Sudo apt install libxcb-xinerama
ライブラリがインストールされました。だから私は古いトリックを使ったそうです--reinstall
Sudo apt install --reinstall libxcb-xinerama
この最後のコマンドは私の問題を解決しました。
だから、私は問題が何であったかを理解しようとして約1日を費やしました。提案されたすべてのソリューションを試してみましたが、xcb libsのインストールやQtプラグインフォルダーのエクスポートのように機能するものはありませんでした。 QT_DEBUG_PLUGINS=1
を使用して問題をデバッグすることを提案したソリューションでは、答えのような直接的な洞察が得られませんでした-代わりに、Qt5Core内の未解決のシンボルについて何かを得ていました。
しかし、それは私にヒントを与えました:異なるQtインストールから異なるファイルを使用しようとしている場合はどうでしょうか?私のマシンでは、/home/username/Qt/
にインストールされた標準バージョンと、自分でコンパイルしたプロジェクト内のいくつかのローカルビルドがありました(他の場所にも他のカスタムビルドキットがあります)。 Qtメンテナンスツールによってインストールされたキットまたは自分でビルドしたキットのいずれかを使用しようとすると、「xcbエラー」が発生します。
解決策は簡単でした。QtパスをCMAKE_PREFIX_PATH
で提供し、私がしたようにQt5_DIR
ではなく、問題を解決しました。例:
cmake .. -DCMAKE_PREFIX_PATH=/home/username/Qt/5.11.1/gcc_64
私の場合、Ubuntu virtualboxゲストに2つのQtアプリをデプロイする必要がありました。 1つはコマンドライン(「app」)で、もう1つはGUIベース(「app_GUI」)です。
「ldd app」を使用して、必要なライブラリを確認し、Ubuntuゲストにコピーしました。 コマンドラインの実行可能ファイル「app」は問題なく動作しましたが、GUIベースの実行可能ファイルはクラッシュし、「プラットフォームプラグイン「xcb」エラーの読み込みに失敗しました。 libxcb.soのlddをチェックしましたが、これも欠落している依存関係はありませんでした。
問題は、適切なライブラリをすべてコピーしたときに、ゲストシステムにすでに存在するライブラリも誤ってコピーしてしまったことです。(a)そもそもコピーする必要はなく、(b)悪いことに、それらをコピーするとインストールライブラリ間で非互換性が生じました。さらに悪いことに、私が言ったように、それらはlddによって検出されませんでした。
ソリューション? lddおよび絶対に余分なライブラリーがないで欠落していると表示されているライブラリーを必ずコピーしてください。
Viberをインストールした後、同じ問題に直面しました。 /opt/viber/plugins/
に必要なqtライブラリがすべて含まれていました。 /opt/viber/plugins/platforms/libqxcb.so
の依存関係を確認しましたが、欠落している依存関係が見つかりました。それらはlibxcb-render.so.0
、libxcb-image.so.0
、libxcb-icccm.so.4
、libxcb-xkb.so.1
だったので、不足しているパッケージをこのライブラリにインストールすることで問題を解決しました。
apt-get install libxcb-xkb1 libxcb-icccm4 libxcb-image0 libxcb-render-util0
私はこの問題を抱えていましたが、気が付くと自分の環境からQt Configを削除しました。つまり、
rm -rf ~/.config/Qt*
次に、qtcreatorを起動し、マシンの既存の状態で再構成しました。私のプロジェクトがどこにあるのかはもはや覚えていませんが、それは単に「初めて」それらを参照しなければならなかったことを意味します。
しかし、もっと重要なのは、それ自体が一貫したライブラリパスのセットを構築したため、xcbまたはqxcbライブラリが欠落することなく、プロジェクトの実行可能ファイルを再構築して実行できることです。
すべてのQtを、オープンソースプロジェクトの一般的なLinuxビルドに静的にリンクします。生活が少し楽になります。最初にQtライブラリの静的バージョンを構築する必要があります。もちろん、ライセンスの問題のため、これはクローズドソースソフトウェアには適用できません。たとえば、LinuxでのQt5アプリの展開は、Ubuntu 12.04のパッケージリポジトリにQt5ライブラリがないため、少し問題があります。
qt.conf
のソリューションが気に入っています。
次の行でqt.conf
を実行可能ファイルの近くに配置します。
[Paths]
Prefix = /path/to/qtbase
そして、それは魅力のように機能します:^)
この問題には多くの原因が考えられます。キーは使用することです
export QT_DEBUG_PLUGINS=1
qtアプリケーションを実行する前に。次に、出力を調べて、エラーの方向を示します。私の場合、それは:
Cannot load library /opt/nao/plugins/platforms/libqxcb.so: (/opt/nao/bin/../lib/libz.so.1: version `ZLIB_1.2.9' not found (required by /usr/lib/x86_64-linux-gnu/libpng16.so.16))
しかし、それは異なるスレッドで解決されます。たとえば https://stackoverflow.com/a/50097275/2408964 を参照してください。