qtがインストールされていないLinuxでqt5アプリを起動しているときに「プラットフォームプラグイン” xcb“を読み込めませんでした」


101

Qt5を使用するlinux用のアプリケーションを作成しました。

しかし、Qt SDKがインストールされていないLinuxで起動しようとすると、コンソールの出力は次のようになります。

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

どうすれば修正できますか?プラグインファイルをコピーする必要がありますか?Qt5をインストールした状態でubuntuを使用しても、Qtディレクトリの名前を変更すると、同じ問題が発生します。したがって、Qtディレクトリのファイルを使用します...

更新:libqxcb.soファイルを使用してapp dir "platforms"フォルダーに作成すると、アプリはまだ起動しませんが、エラーメッセージが変わります。

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

xcb

これはどうやって起こりますか?プラットフォームプラグインはどのようにして利用できますが、ロードできませんか?


1
明確にするために、Qtライブラリは実際にインストールされていますか?
cmannett85 2013年

1
Qtライブラリがインストールされている場合、プログラムは正常に動作します。インストールされていない場合、またはqt sdk dirが見つからない場合、プログラムは動作しません。
運動

libQt5Gui.so.5もコピーしてください
edaniels 2013

1
イブオンラインランチャーからここに来る人のために:使用eveonline.shしないでくださいeveonline-ランチャーにはすべてのライブラリが特別なバージョンにバンドルされています。
OndraŽižka2017年

回答:


59

ldd(man ldd)を使用して、共有ライブラリの依存関係を表示します。これをlibqxcb.soで実行する

.../platforms$ ldd libqxcb.so

xcbがlibQt5Core.so.5とlibQt5Gui.so.5(および他の多くのシステムライブラリ)に加えてlibQt5DBus.so.5に依存していることを示します。libQt5DBus.so.5を共有ライブラリのコレクションに追加すれば、次に進む準備ができているはずです。


1
ありがとうございました!これがまさに問題でした。libQt5DBus.so.5は、coreおよびguiとともにドキュメントにリストされているはずです。
dzlatkov 2014年

4
私の場合sudo apt-get install libx11-xcb1は問題を修正しました。しかし、あなたが使用することをお勧めしlddたので、正しいライブラリをインストールするように指示されました。ありがとう!
ダニエル

4
私の場合、libQt5XcbQpa.so.5もlibフォルダーに追加する必要がありました。
elsamuko 2015年

4
を試してもこの問題が解決しない場合は、Qtインストール内lddplugins/platformsディレクトリを探してみてください。このディレクトリ全体を、バイナリまたは共有ライブラリファイルと同じ場所にコピーしてください。それが機能する場合、設定することができますLD_LIBRARY_PATH(ハッキー)、または@bossbarberの回答で述べたように、QT_QPA_PLATFORM_PLUGIN_PATH
csl 2016年

1
私の場合、/ usr / bin / platformsディレクトリが作成されていません。解決方法:sudo ln -sf / usr / lib / x86_64-linux-gnu / qt5 / plugins / platforms / / usr / bin /
gipsh

55

以前に投稿したように、アプリケーションをデプロイするときにプラットフォームプラグインをインストールする必要があります。デプロイ方法に応じて、実行時にプラットフォームプラグイン(たとえば、platforms / plugins / libqxcb.so)がどこにあるかをアプリケーションに通知する2つの方法があります。

1つ目は、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

これに関する詳細は、ここおよびqt.confの使用にあります。


1
うわー!本当にありがとう!、それは展開よくある質問の最初のページにすべきqt.conf知りませんでした

私の場合、何らかの理由でqt.conf(Plugins = plugins)内のパスが認識されませんでした。最終的に、空のqt.confファイルを提供しました。これにより、グローバル(ハードコード)パスをqt.conf-defaultsで上書きできます。私の場合は、app-directoryのplugins-Subfolderです。
Bピルツ2016

1
なぜうまくいかLD_LIBRARY_PATHないのかと思っていましたQT_QPA_PLATFORM_PLUGIN_PATHが、トリックを行いました。本当にありがとう。
Ahmed Fasih 2018

1
2回目または3回目はこの答えに到達し、それが毎回役立ちます。
kyb 2018

26

5.7Qt 5.5がプリインストールされているUbuntu 16.04 LTSで、Qt でコンパイルしたバイナリを起動しようとしました。うまくいきませんでした。

最初に、lddここで提案されているようにバイナリ自体を検査し、すべての「見つからない」依存関係を「満足」させました。次に、この悪名高いThis application failed to start because it could not find or load the Qt platform plugin "xcb"エラーがスローされました。

Linuxでこれを解決する方法

platformsQtがXCBライブラリを探す場所なので、最初にバイナリがあるディレクトリを作成する必要があります。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=.)。すべての依存関係が満たされるまでこのプロセスを繰り返します。

PS この回答の作成者に感謝しQT_DEBUG_PLUGINS=1ます。


1
libQt5xcbQpa.so.5およびlibQtDBus.so.5への不特定の依存関係がありましたが、指示どおりにプラットフォームフォルダーを追加する必要があることがわかりました。その組み合わせはそれを機能させました。
BSD

誰かがこのエラーを修正する方法の「For Dummies」の説明を教えてもらえますか?これが何を意味するのか私にはわかりません。Linuxでこれを解決する方法について、段階的な説明が必要です。
ジョンスミス

@JohnSmith正確に何が意味をなさないかを私たちに教えてください。その後、詳しく説明します。
神経伝達物質

11

Ubuntu 16.04 64ビット。どうやら理由もなく問題が発生しました。VideoLanインスタンスで映画を見る前の夜、その夜、VideoLanで別の映画を観たいと思います。質問のエラーのため、VLCは実行したくありませんでした。私は少しグーグルし、それが私の問題を解決する解決策を見つけました:これからは、VLCは以前と同じように実行可能です。解決策はこのコマンドです:

sudo ln -sf /usr/lib/x86_64-linux-gnu/qt5/plugins/platforms/ /usr/bin/

私はその結果が何であるかを説明することはできませんが、いくつかの失われたシンボリックリンクを作成することを知っています。


2
-f --forceUがあなたが何をしているのか本当にわかるまでフラグを使わないでください。これは他の問題を引き起こす可能性があります。
kyb 2017

これは、Ubuntu 18.04で私が解決したものです(問題のあるアプリケーションはRescue Timeです)。すでにそこにディレクトリがある場合は、-fフラグをオフにしてください。
Eloff

10

各回答の主要部分を試しましたが、役に立ちませんでした。最後に修正したのは、次の環境変数をエクスポートすることでした。

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 17.10で動作しました(ただし、16.04以降、この問題が発生しています)export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/lib/x86_64-linux-gnu/。残念ながら、それは私のVLCのみを修正し、同じエラーのあるVirtualboxは修正しませんでした...
Tails

Ubuntu 18.04でtexworks 0.6.2を稼働させました。
XavierStuvw

8

バージョン5以降、Qtはプラットフォーム抽象化システム(QPA)を使用して、基盤となるプラットフォームから抽象化します。

各プラットフォームの実装は、プラグインによって提供されます。X11の場合はXCBプラグインです。依存関係の詳細については、Qt for X11の要件を参照してください。


それで、依存関係のリストからすべてのパッケージをインストールする必要があるだけですか?そして、これはうまくいきますか?また、QT SDK dirでファイルlibqxcb.soを見つけましたが、それをusr / libディレクトリに置いても問題は解決しませんでした。
運動

X11プラットフォームへのアプリケーションのデプロイページには必要なすべての情報が含まれているはずです。
2013年

そのページに記載されているすべてのパッケージをインストールしましたが、役に立ちませんでした。プラットフォームプラグインは、 "platforms"フォルダー内の実行可能ファイルのディレクトリにある必要があるという情報を見つけました。私はそこにxcbプラグインを置きましたが、エラーが変更されました: "Failed to load platform plugin" xcb "。利用可能なプラットフォームは次のとおりです:xcb"
locomotion

1
@cloose再び死んだ:(
user89

@ user89は私には適していません。一時的な問題でしょうか?
2015

6

おそらくこれが役立つでしょう。私はUbuntu 18.04を使用しており、ppaメソッドを使用してKritaをインストールしました。私はこのエラーを受け取りました:

このアプリケーションは、「」内の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

私はlibをインストールしました。だから古いトリックを使った--reinstall

sudo apt install --reinstall libxcb-xinerama

この最後のコマンドは私の問題を解決しました。


6

この問題には多くの原因が考えられます。キーは使用することです

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を参照してください


:facepalm:OMG、これも同じアドバイスです。いいえ、これは有用な情報を提供しません。同じ正確なエラーのはるかに詳細なバージョンを提供します。他に見るべきヒントや手がかりはありません。何も欠けていない、私がまだ知らなかった「ロードできない」ものは何もない。
ジョンスミス

2

Viberをインストールした後も同じ問題に直面しました。すべての必要なqtライブラリがにありました/opt/viber/plugins/。の依存関係を確認/opt/viber/plugins/platforms/libqxcb.soしたところ、欠落している依存関係が見つかりました。た彼らはlibxcb-render.so.0libxcb-image.so.0libxcb-icccm.so.4libxcb-xkb.so.1 だから私は、このライブラリで不足しているパッケージをインストールすることで、私の問題を解決します:

apt-get install libxcb-xkb1 libxcb-icccm4 libxcb-image0 libxcb-render-util0


Tizen Emulatorの起動に問題がありました。これは役に立ちました。ありがとう。
AlexM 2017年

2

それで、私は1日を費やして何が問題だったかを理解しようとしました。提案されたソリューションをすべて試しましたが、xcb libsのインストールやQtプラグインフォルダーのエクスポートのように機能するものはありませんでした。QT_DEBUG_PLUGINS=1問題のデバッグに使用することを提案したソリューションでは、回答のような直接的な洞察は得られませんでした。代わりに、Qt5Core内の未解決のシンボルについて何かを得ていました。

ただし、ヒントが得られました。異なるQtインストールの異なるファイルを使用しようとしている場合はどうなりますか?私のマシンには、標準バージョンがインストールされていて/home/username/Qt/、自分でコンパイルしたプロジェクト内のいくつかのローカルビルドがありました(他の場所にも他のカスタムビルドキットがあります)。(Qtメンテナンスツールによってインストールされた、または自分でビルドした)キットを使用しようとすると、「xcbエラー」が発生しました。

解決策は簡単でした。Qtパスを提供しましたCMAKE_PREFIX_PATHQt5_DIR、私とは異なり、問題を解決しました。例:

cmake .. -DCMAKE_PREFIX_PATH=/home/username/Qt/5.11.1/gcc_64


ああ、それは、Web上のすべてのソリューションが機能するのではなく、予期しないエラーを提供するLinuxの世界とは何でしょうか。今まで?Ubuntuのストックインストールで動作するデスクトップを取得しようとしている3日間。いいえ、Googleからお越しの場合:このソリューションは、このページでは他の何よりもうまく機能しません。Linuxは実際にはまったく機能しないと思い始めています。
ジョンスミス

2

同じエラーメッセージで非常によく似た問題が発生しました。まず、コマンドラインコマンドでQtデバッグプリンターをオンにしてデバッグします。

QT_DEBUG_PLUGINS = 1をエクスポート

そして、アプリケーションを再実行します。私にとってこれは次のことを明らかにしました:

「ライブラリ/home/.../miniconda3/lib/python3.7/site-packages/PyQt5/Qt/plugins/platforms/libqxcb.so:(libxkbcommon-x11.so.0:を共有できません:共有オブジェクトファイルを開けません:そのようなファイル、又はディレクトリはありません)"

「ライブラリ/home/.../miniconda3/lib/python3.7/site-packages/PyQt5/Qt/plugins/platforms/libqxcb.so:(libxkbcommon-x11.so.0:を共有できません:共有オブジェクトファイルを開けません:そのようなファイル、又はディレクトリはありません)"

実際、libxkbcommon-x11.so.0とlibxkbcommon-x11.so.0がありませんでした。次に、linuxコマンドラインからdpkgを使用してアーキテクチャを確認します。(私にとって、コマンド「arch」は異なる、役に立たない結果を与えました)

dpkg --print-architecture #result for me:amd64

次に、「libxkbcommon-x11.so.0 ubuntu 18.04 amd64」をグーグル検索し、libxkbcommon-x11.so.0の場合も同様に、packages.ubuntu.comでこれらのパッケージを生成しました。これは、当然のことながら、libxkbcommon-x11-0およびlibxkbcommon0というパッケージが欠落していること、およびこれらのパッケージをインストールすると必要なファイルが含まれますが、devバージョンには含まれないことがわかりました。次に、ソリューション:

sudo apt-get update

sudo apt-get install libxkbcommon0

sudo apt-get install libxkbcommon-x11-0


1

私の場合、Ubuntu virtualboxゲストに2つのQtアプリをデプロイする必要がありました。1つはコマンドライン( "app")、もう1つはGUIベース( "app_GUI")でした。

「ldd app」を使用して必要なライブラリを探し、Ubuntuゲストにコピーしました。 コマンドラインの実行可能ファイル「アプリ」は問題なく動作していましたが、GUIベースの実行可能ファイルがクラッシュし、「プラットフォームプラグイン「xcbを読み込めませんでした」というエラーが発生しました。ldxでlibxcb.soを確認しましたが、依存関係もありませんでした。

問題は、正しいライブラリをすべてコピーしたときに、ゲストシステムに既に存在するライブラリも誤ってコピーしてしまったことです。 、それらをコピーすると、インストールライブラリ間で非互換性が生じました。さらに悪いことに、私が言ったように、それらはlddによって検出されませんでした。

ソリューション?lddで不足していると表示されているライブラリをコピーし、余分なライブラリは絶対にコピーしないようにしてください。


そして、私はこのアドバイスを使用して問題を解決します、どうやって?
ジョンスミス

1

私の場合、ヘッダーファイルの欠落がlibxcbQtによってビルドされなかった理由でした。https://wiki.qt.io/Building_Qt_5_from_Git#Linux.2FX11に従ってそれらをインストールすると、問題が解決しました。

yum install libxcb libxcb-devel xcb-util xcb-util-devel mesa-libGL-devel libxkbcommon-devel

1
ええ、私は同様の問題があったと思います。ソースからqtをコンパイルしましたが、xcb-toolchainが私のシステムでは正気ではなかったので、qt-xcbパーツはインストールされませんでした。
シェビー

1

私はのソリューションが好きqt.confです。

qt.conf次の行で実行可能ファイルの近くに置きます:

[Paths]
Prefix = /path/to/qtbase

そしてそれは魅力のように機能します:^)

実際の例:

[Paths]
Prefix = /home/user/SDKS/Qt/5.6.2/5.6/gcc_64/

これに関するドキュメントはこちらです:https : //doc.qt.io/qt-5/qt-conf.html


そして、私は「実行可能ファイルの近くにqt.confを置きます」どのように、正確に?
ジョンスミス

提示された内容でファイルを作成します。cd path/to/executable; vim qt.conf、貼り付けます。保存して終了。
kyb

同じリンクが既に回答
kyb

0

すべてのQtのものを静的に私のオープンソースプロジェクトの一般的なLinuxビルドにリンクしています。生活が少し楽になります。まず、Qtライブラリの静的バージョンをビルドする必要があります。もちろん、これは、ライセンスの問題のため、クローズドソースソフトウェアには適用できません。Linux 12.QのQt5アプリのデプロイは、たとえばUbuntu 12.04のパッケージリポジトリにQt5ライブラリがないため、現在少し問題があります。


0

私はこの問題を抱えていましたが、直ぐにQt Configsを環境から削除しました。つまり、

rm -rf ~/.config/Qt*

次に、qtcreatorを起動し、マシンの既存の状態で再構成しました。私のプロジェクトがどこにあったかはもう思い出されませんでしたが、それは単に「初めて」それらを参照する必要があったことを意味しました。

しかし、さらに重要なことに、それ自体が一貫したライブラリパスのセットを構築したので、xcbまたはqxcbライブラリが失われることなく、プロジェクトの実行可能ファイルを再構築して実行できました。


Qtcreatorは、私が解決しようとしているのとまったく同じエラーを出します。もちろん。なぜなら、Web上のLinuxの問題に対する実用的な解決策が1つでも見つかったとしたら、それはLinuxではないからです。申し訳ありませんが、これは信じられないほどイライラします。野生のガチョウの追跡のSEページ全体で、使用可能な単一のソリューションがなく、ストックパネルのUbuntuインストールでエラーなしにデスクトップパネルを実行するだけです。Linuxが実際にまったく正しく動作するかどうかは非常に疑わしくなっています。
ジョンスミス

これは私の場合には役に立ちませんでした。
Eugene Gr。フィリポフ

-4

sudo ln -sf /usr/lib/...."adapt-it"..../qt5/plugins/platforms/ / usr / bin /

見逃したシンボリックリンクを作成します。QTに適しています!VLCに適しています!!


2
答えを説明してください
アナンサラジュC 2017

動作しません。何も機能しないため。このページは100%間違っています。ここにある「解決策」の1つでも機能しません。
ジョンスミス

@JohnSmithは、回答に対する賛成票の量から判断して、一部の人は確かに一部の人のために働いています。残念ながら、あなたには何もうまくいきません。私はあなたの不満を理解できます。しかし、何もうまくいかない場合は、独自の調査を行い、あなたのケースでうまくいった答えを提出してください。つまり、あなたはプラットフォームを5年間使用していて、答えは6つしかありません。文句を言うのではなく、コミュニティに恩返しすることを謙虚に勧めます。私たちはお互いを助けるためにここにいます。
神経伝達物質
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.