Saya menulis aplikasi untuk linux yang menggunakan Qt5.
Tetapi ketika saya mencoba meluncurkannya di linux tanpa Qt SDK diinstal, output di konsol adalah:
Gagal memuat plugin platform "xcb". Platform yang tersedia adalah:
Bagaimana cara memperbaikinya? Mungkin saya perlu menyalin beberapa file plugin? Ketika saya menggunakan ubuntu dengan Qt5 terinstal, tetapi saya mengganti nama direktori Qt, masalah yang sama terjadi. Jadi, ini menggunakan beberapa file dari direktori Qt ...
PEMBARUAN: ketika saya membuat di folder "platform" app dir dengan file libqxcb.so , aplikasi masih tidak mulai, tetapi pesan kesalahan berubah:
Gagal memuat plugin platform "xcb". Platform yang tersedia adalah:
xcb
Bagaimana ini bisa terjadi? Bagaimana plugin platform tersedia tetapi tidak dapat dimuat?
eveonline.sh
, bukaneveonline
- peluncur memiliki semua lib yang dibundel dengan versi khusus.Jawaban:
Gunakan ldd (man ldd) untuk menampilkan dependensi library bersama. Jalankan ini di 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 harus siap untuk melanjutkan.
sumber
sudo apt-get install libx11-xcb1
memperbaiki masalah. Tetapi rekomendasi Anda untuk menggunakanldd
adalah apa yang mengarahkan saya ke perpustakaan yang benar untuk diinstal. Terima kasih!ldd
, coba cariplugins/platforms
direktori di dalam instalasi Qt Anda. Coba salin seluruh direktori ini ke tempat yang sama dengan biner atau file pustaka bersama Anda. Jika berhasil, Anda dapat menyetelLD_LIBRARY_PATH
(hacky) atau, seperti yang disebutkan dalam jawaban oleh @bossbarberQT_QPA_PLATFORM_PLUGIN_PATH
,.Seperti yang telah diposting sebelumnya, Anda perlu memastikan bahwa Anda menginstal plugin platform saat Anda menerapkan aplikasi Anda. Bergantung pada bagaimana Anda ingin menyebarkan sesuatu, ada dua metode untuk memberi tahu aplikasi Anda di mana plugin platform (misalnya platform / plugins / libqxcb.so) berada pada waktu proses yang mungkin bekerja untuk Anda.
Yang pertama adalah mengekspor jalur ke direktori melalui variabel QT_QPA_PLATFORM_PLUGIN_PATH.
atau
Opsi lainnya, yang saya sukai adalah membuat file qt.conf di direktori yang sama dengan file yang dapat dieksekusi. Isinya adalah:
Informasi lebih lanjut tentang ini dapat ditemukan di sini dan di menggunakan qt.conf
sumber
LD_LIBRARY_PATH
tidak berhasil, tetapiQT_QPA_PLATFORM_PLUGIN_PATH
berhasil. Terima kasih super.Saya mencoba memulai biner saya, dikompilasi dengan Qt
5.7
, di Ubuntu 16.04 LTS tempat Qt5.5
diinstal sebelumnya. Tidak berhasil.Pada awalnya, saya memeriksa biner itu sendiri dengan
ldd
seperti yang disarankan di sini, dan "memenuhi" semua dependensi "tidak ditemukan". KemudianThis application failed to start because it could not find or load the Qt platform plugin "xcb"
kesalahan terkenal ini dilemparkan.Cara mengatasi ini di Linux
Pertama-tama Anda harus membuat
platforms
direktori tempat biner Anda berada, karena itu adalah tempat Qt mencari pustaka XCB. Salin dilibqxcb.so
sana. Saya bertanya-tanya mengapa penulis jawaban lain tidak menyebutkan ini.Kemudian Anda mungkin ingin menjalankan biner Anda dengan
QT_DEBUG_PLUGINS=1
variabel lingkungan disetel untuk memeriksa dependensi manalibqxcb.so
yang tidak "terpenuhi". (Anda juga dapat menggunakanldd
ini seperti yang disarankan dalam jawaban yang diterima).Output perintah mungkin terlihat seperti ini:
Perhatikan
libQt5DBus.so.5
perpustakaan yang gagal . Salin ke jalur perpustakaan Anda, dalam kasus saya itu adalah direktori yang sama tempat biner saya (karenanyaLD_LIBRARY_PATH=.
). Ulangi proses ini sampai semua dependensi terpenuhi.PS terima kasih kepada penulis jawaban ini untuk
QT_DEBUG_PLUGINS=1
.sumber
Ubuntu 16.04 64bit. Saya mendapat masalah tanpa alasan. Malam sebelum saya menonton film di instance VideoLan saya, malam itu saya ingin menonton film lain dengan VideoLan. VLC hanya tidak ingin berjalan karena kesalahan pada pertanyaan tersebut. Saya google sedikit dan saya menemukan solusi yang memecahkan masalah saya: mulai sekarang, VLC dapat dijalankan seperti sebelumnya. Solusinya adalah perintah ini:
sudo ln -sf /usr/lib/x86_64-linux-gnu/qt5/plugins/platforms/ /usr/bin/
Saya tidak dapat menjelaskan apa konsekuensinya, tetapi saya tahu ini menciptakan beberapa tautan simbolis yang hilang.
sumber
-f
--force
bendera sampai Anda benar-benar tahu apa yang Anda lakukan. Ini dapat menyebabkan masalah lain.Saya mencoba bagian utama dari setiap jawaban, tetapi tidak berhasil. Apa yang akhirnya memperbaikinya untuk saya adalah mengekspor variabel lingkungan berikut:
sumber
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/lib/x86_64-linux-gnu/
. Sayangnya itu hanya memperbaiki VLC saya, bukan Virtualbox yang memiliki kesalahan yang sama ...Sejak versi 5, Qt menggunakan sistem abstraksi platform (QPA) untuk mengabstraksi dari platform yang mendasarinya.
Implementasi untuk setiap platform disediakan oleh plugin. Untuk X11 itu adalah plugin XCB. Lihat persyaratan Qt untuk X11 untuk informasi selengkapnya tentang dependensi.
sumber
Mungkin ini akan membantu. Saya menggunakan Ubuntu 18.04 dan ketika saya menginstal Krita menggunakan metode ppa. Saya mendapat kesalahan ini:
Saya mencoba semua solusi yang saya temukan di utas ini dan web lain tanpa hasil.
Akhirnya, saya menemukan sebuah posting di mana penulis menyebutkan bahwa dimungkinkan untuk mengaktifkan debugging yang diberi tahu tentang qt5 menggunakan perintah sederhana ini:
Setelah menambahkan perintah ini saya jalankan lagi krita saya mendapat kesalahan yang sama bagaimana sekarang saya tahu penyebabnya.
Kesalahan ini mencegah "xcb" untuk memuat dengan benar. Jadi solusinya adalah menginstal `libxcb-xinerama.so.0" kan? Namun, ketika saya menjalankan perintah:
Saya lib telah diinstal. Jadi saya menggunakan trik lama ya
--reinstall
Perintah terakhir ini menyelesaikan masalah saya.
sumber
Mungkin ada banyak penyebab masalah ini. Kuncinya adalah menggunakan
sebelum Anda menjalankan aplikasi Qt Anda. Kemudian, periksa hasilnya, yang akan mengarahkan Anda ke arah kesalahan. Dalam kasus saya, itu adalah:
Tapi itu diselesaikan di utas yang berbeda. Lihat misalnya https://stackoverflow.com/a/50097275/2408964 .
sumber
Saya menghadapi masalah yang sama ketika setelah menginstal Viber. Itu semua membutuhkan perpustakaan qt di
/opt/viber/plugins/
. Saya memeriksa dependensi/opt/viber/plugins/platforms/libqxcb.so
dan menemukan dependensi yang hilang. Merekalibxcb-render.so.0
,libxcb-image.so.0
,libxcb-icccm.so.4
,libxcb-xkb.so.1
Jadi saya menyelesaikan masalah saya dengan menginstal paket hilang dengan perpustakaan ini:apt-get install libxcb-xkb1 libxcb-icccm4 libxcb-image0 libxcb-render-util0
sumber
Jadi, saya menghabiskan waktu sekitar satu hari mencoba mencari tahu apa masalahnya; mencoba semua solusi yang diusulkan, tetapi tidak ada yang berhasil seperti menginstal xcb libs atau mengekspor folder plugin Qt. Solusi yang disarankan untuk digunakan
QT_DEBUG_PLUGINS=1
untuk men-debug masalah tidak memberi saya wawasan langsung seperti dalam jawaban - sebagai gantinya saya mendapatkan sesuatu tentang simbol yang belum terselesaikan dalam Qt5Core.Itu memberi saya petunjuk, meskipun: bagaimana jika itu mencoba menggunakan file yang berbeda dari instalasi Qt yang berbeda? Di mesin saya, saya menginstal versi standar
/home/username/Qt/
dan beberapa build lokal dalam proyek saya yang saya kompilasi sendiri (saya memiliki kit yang dibuat khusus lainnya juga di lokasi lain). Setiap kali saya mencoba menggunakan kit apa pun (dipasang oleh alat pemeliharaan Qt atau dibuat sendiri), saya akan mendapatkan "kesalahan xcb".Solusinya sederhana: berikan jalur Qt melalui
CMAKE_PREFIX_PATH
dan bukanQt5_DIR
seperti yang saya lakukan, dan itu memecahkan masalah. Contoh:cmake .. -DCMAKE_PREFIX_PATH=/home/username/Qt/5.11.1/gcc_64
sumber
Saya mengalami masalah yang sangat mirip dengan pesan kesalahan yang sama. Pertama, debug beberapa dengan menyalakan printer Qt Debug dengan perintah baris perintah:
dan jalankan kembali aplikasi. Bagi saya ini mengungkapkan yang berikut:
"Tidak dapat memuat perpustakaan /home/.../miniconda3/lib/python3.7/site-packages/PyQt5/Qt/plugins/platforms/libqxcb.so: (libxkbcommon-x11.so.0: tidak dapat membuka file objek bersama: Tidak ada berkas atau direktori seperti itu)"
"Tidak dapat memuat perpustakaan /home/.../miniconda3/lib/python3.7/site-packages/PyQt5/Qt/plugins/platforms/libqxcb.so: (libxkbcommon-x11.so.0: tidak dapat membuka file objek bersama: Tidak ada berkas atau direktori seperti itu)"
Memang, saya kehilangan libxkbcommon-x11.so.0 dan libxkbcommon-x11.so.0. Selanjutnya, periksa arsitektur Anda menggunakan dpkg dari baris perintah linux. (Bagi saya, perintah "arch" memberikan hasil yang berbeda dan tidak membantu)
Saya kemudian mencari di Google "libxkbcommon-x11.so.0 ubuntu 18.04 amd64", dan juga untuk libxkbcommon-x11.so.0, yang menghasilkan paket-paket tersebut di packages.ubuntu.com. Itu memberi tahu saya, dalam retrospeksi yang tidak mengejutkan, saya kehilangan paket yang disebut libxkbcommon-x11-0 dan libxkbcommon0, dan bahwa menginstal paket-paket itu akan menyertakan file yang diperlukan, tetapi versi dev tidak. Lalu solusinya:
sumber
Dalam kasus saya, saya perlu menerapkan dua aplikasi Qt pada tamu virtualbox Ubuntu. Salah satunya adalah baris perintah ("app"), yang lain berbasis GUI ("app_GUI").
Saya menggunakan "ldd app" untuk mencari tahu libs apa yang diperlukan, dan menyalinnya ke guest Ubuntu. Sementara "aplikasi" baris perintah yang dapat dieksekusi bekerja dengan baik, executable berbasis GUI mengalami crash, memberikan kesalahan "Gagal memuat plugin platform" xcb ". Saya memeriksa ldd untuk libxcb.so, tetapi ini juga tidak memiliki ketergantungan yang hilang.
Masalahnya adalah bahwa meskipun saya menyalin semua perpustakaan yang benar, saya secara tidak sengaja juga menyalin perpustakaan yang sudah ada di sistem tamu .. artinya (a) mereka tidak perlu menyalinnya sejak awal dan (b) lebih buruk , menyalinnya menghasilkan ketidakcocokan antara pustaka instal. Lebih buruk lagi, mereka tidak terdeteksi oleh ldd seperti yang saya katakan ..
Solusinya? Pastikan Anda menyalin pustaka yang ditampilkan hilang oleh ldd dan sama sekali tidak ada pustaka tambahan .
sumber
Dalam kasus saya, file header yang hilang adalah alasannya
libxcb
tidak dibuat oleh Qt. Menginstalnya sesuai dengan https://wiki.qt.io/Building_Qt_5_from_Git#Linux.2FX11 menyelesaikan masalah:sumber
Saya suka solusi dengan
qt.conf
.Letakkan di
qt.conf
dekat file yang dapat dieksekusi dengan baris berikutnya:Dan itu bekerja seperti pesona: ^)
Untuk contoh kerja:
Dokumentasi tentang ini ada di sini: https://doc.qt.io/qt-5/qt-conf.html
sumber
cd path/to/executable; vim qt.conf
, tempel. Simpan dan keluar.Saya menautkan semua hal Qt secara statis ke build Linux generik dari proyek open source saya. Itu membuat hidup sedikit lebih mudah. Anda hanya perlu membangun versi statis pustaka Qt terlebih dahulu. Tentu saja ini tidak dapat diterapkan pada perangkat lunak sumber tertutup karena masalah lisensi. Penerapan aplikasi Qt5 di Linux saat ini agak bermasalah, karena Ubuntu 12.04, misalnya, tidak memiliki pustaka Qt5 di repositori paket.
sumber
Saya mengalami masalah ini, dan berdasarkan firasat saya menghapus Qt Configs dari lingkungan saya. Yaitu,
Kemudian saya memulai qtcreator dan mengkonfigurasi ulang sendiri dengan status mesin yang ada. Ia tidak lagi mengingat di mana proyek saya, tetapi itu berarti saya harus menjelajahinya "untuk pertama kali" lagi.
Tetapi yang lebih penting, ia membangun sendiri kumpulan jalur pustaka yang koheren, sehingga saya dapat membangun kembali dan menjalankan proyek yang dapat dieksekusi lagi tanpa pustaka xcb atau qxcb hilang.
sumber
sudo ln -sf /usr/lib/...."adapt-it"..../qt5/plugins/platforms/ / usr / bin /
Ini menciptakan tautan simbolis yang terlewat. Bagus untuk QT! Bagus untuk VLC !!
sumber