GNU/Linux >> Belajar Linux >  >> Linux

Gagal memuat plugin platform xcb saat meluncurkan aplikasi qt5 di linux tanpa qt terpasang

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 .


Linux
  1. Kali Linux - Platform Pengujian Penetrasi

  2. OpenGL tanpa X.org di linux

  3. Butuh distro kecil tanpa desktop atau windows manager, hanya untuk menjalankan satu aplikasi grafis

  1. Modul kernel Linux kita tidak bisa hidup tanpanya

  2. Cara Menambahkan Pencetak di Linux Mint 12 | Tambahkan Pencetak di Linux Mint

  3. Cara membuka Appimage di Linux

  1. Memindahkan file di Linux tanpa mv

  2. Cara Menguji Paket Tanpa Menginstalnya Di Linux

  3. Linux – Apa yang Akan Terjadi Jika Hard Drive Gagal Saat Kernel Linux Berjalan?