GNU/Linux >> Linux の 問題 >  >> Linux

qt がインストールされていない Linux で qt5 アプリを起動しているときに、プラットフォーム プラグイン xcb をロードできませんでした

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

.../platforms$ ldd libqxcb.so

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


以前に投稿したように、アプリケーションをデプロイするときにプラットフォーム プラグインをインストールする必要があります。デプロイ方法に応じて、プラットフォーム プラグイン (例:platform/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 の使用を参照してください


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

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

Linux でこれを解決する方法

最初に platforms を作成する必要があります QtがXCBライブラリを探す場所であるため、バイナリがあるディレクトリ。 libqxcb.so をコピー そこの。他の回答の著者がこれについて言及しなかったのはなぜだろうか.

次に、バイナリを QT_DEBUG_PLUGINS=1 で実行したい場合があります libqxcb.so のどの依存関係をチェックするために設定された環境変数 「満足」していません。 (ldd を使用することもできます これについては、受け入れられた回答で提案されているとおりです)。

コマンド出力は次のようになります:

[email protected]:/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 のこの回答の作成者に感謝します .


Linux
  1. Linuxでmvなしでファイルを移動する

  2. LinuxでAppimageを開く方法

  3. Linuxにインストールせずにパッケージをテストする方法

  1. なしでは生きていけないLinuxカーネルモジュール

  2. Linux で X.org を使用しない OpenGL

  3. 単一のグラフィカル アプリを実行するためだけに、デスクトップまたは Windows マネージャーのない小さなディストリビューションが必要

  1. LinuxMint12でプリンターを追加する方法| LinuxMintにプリンターを追加する

  2. Linux – Linuxカーネルの実行中にハードドライブに障害が発生した場合はどうなりますか?

  3. Kali Linux - 侵入テスト プラットフォーム