共有ライブラリの依存関係を表示するには、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
のこの回答の作成者に感謝します .