Gunakan ldd (man ldd) untuk menampilkan dependensi perpustakaan bersama. Menjalankan ini di libqxcb.so
.../platforms$ ldd libqxcb.so
menunjukkan bahwa xcb bergantung pada libQt5DBus.so.5 selain libQt5Core.so.5 dan libQt5Gui.so.5 (dan banyak lib sistem lainnya). Tambahkan libQt5DBus.so.5 ke koleksi lib bersama Anda dan Anda akan siap untuk melanjutkan.
Seperti yang telah diposting sebelumnya, Anda perlu memastikan bahwa Anda menginstal plugin platform saat menerapkan aplikasi. Bergantung pada bagaimana Anda ingin men-deploy sesuatu, ada dua metode untuk memberi tahu aplikasi Anda tempat plugin platform (mis. platform/plugins/libqxcb.so) berada pada waktu proses yang mungkin cocok untuk Anda.
Yang pertama adalah mengekspor jalur ke direktori melalui variabel QT_QPA_PLATFORM_PLUGIN_PATH.
QT_QPA_PLATFORM_PLUGIN_PATH=path/to/plugins ./my_qt_app
atau
export QT_QPA_PLATFORM_PLUGIN_PATH=path/to/plugins
./my_qt_app
Opsi lain, yang saya sukai adalah membuat file qt.conf di direktori yang sama dengan file executable Anda. Isinya adalah:
[Paths]
Plugins=/path/to/plugins
Informasi lebih lanjut mengenai hal ini dapat ditemukan di sini dan menggunakan qt.conf
Saya mencoba memulai biner saya, dikompilasi dengan Qt 5.7
, di Ubuntu 16.04 LTS di mana Qt 5.5
sudah diinstal sebelumnya. Tidak berhasil.
Awalnya, saya memeriksa biner itu sendiri dengan ldd
seperti yang disarankan di sini, dan "memuaskan" semua dependensi "tidak ditemukan". Lalu This application failed to start because it could not find or load the Qt platform plugin "xcb"
yang terkenal ini kesalahan dilemparkan.
Cara mengatasinya di Linux
Pertama Anda harus membuat platforms
direktori tempat biner Anda berada, karena di situlah Qt mencari perpustakaan XCB. Salin libqxcb.so
di sana. Saya bertanya-tanya mengapa penulis jawaban lain tidak menyebutkan ini.
Maka Anda mungkin ingin menjalankan biner Anda dengan QT_DEBUG_PLUGINS=1
variabel lingkungan disetel untuk memeriksa dependensi libqxcb.so
yang mana tidak "puas". (Anda juga dapat menggunakan ldd
untuk ini seperti yang disarankan dalam jawaban yang diterima).
Output perintah mungkin terlihat seperti ini:
[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)
Perhatikan libQt5DBus.so.5
yang gagal Perpustakaan. Salin ke jalur perpustakaan Anda, dalam kasus saya ini adalah direktori yang sama dengan biner saya (karenanya LD_LIBRARY_PATH=.
). Ulangi proses ini sampai semua dependensi terpenuhi.
P.S. terima kasih kepada penulis jawaban ini untuk QT_DEBUG_PLUGINS=1
.