“Не вдалося завантажити плагін платформи” xcb “” під час запуску програми qt5 на Linux без встановлення qt


101

Я написав програму для Linux, яка використовує Qt5.

Але коли я намагаюся запустити його на Linux без встановленого Qt SDK, результат у консолі:

Не вдалося завантажити плагін платформи "xcb". Доступні платформи:

Як я можу це виправити? Може мені знадобиться скопіювати якийсь файл плагіна? Коли я використовую ubuntu з встановленим Qt5, але я перейменовую каталог Qt, виникає та сама проблема. Отже, він використовує якийсь файл із каталогу Qt ...

ОНОВЛЕННЯ: коли я створюю в папці "платформи" програми dir файл з файлом libqxcb.so , програма все одно не запускається, але повідомлення про помилку змінюється:

Не вдалося завантажити плагін платформи "xcb". Доступні платформи:

xcb

Як це може статися? Як плагін платформи може бути доступний, але не може бути завантажений?


1
Тільки для уточнення, чи насправді встановлені бібліотеки Qt?
cmannett85

1
Якщо встановлена ​​бібліотека Qt, програма працює нормально. Якщо він не встановлений або каталог qt sdk не знайдений, програма не працює.
locomotion

Переконайтеся, що ви також скопіювали libQt5Gui.so.5
edaniels

1
Для тих, хто приходить сюди з панелі запуску Eve Online: Використовуйте eveonline.sh, а не eveonline- у панелі запуску є всі бібліотеки в комплекті зі спеціальними версіями.
Ondra Žižka,

Відповіді:


59

Використовуйте ldd (man ldd), щоб показати спільні бібліотечні залежності. Запуск цього на libqxcb.so

.../platforms$ ldd libqxcb.so

показує, що xcb залежить від libQt5DBus.so.5 на додаток до libQt5Core.so.5 та libQt5Gui.so.5 (та багатьох інших системних libs). Додайте libQt5DBus.so.5 до вашої колекції спільних бібліотек, і ви повинні бути готові рухатися далі.


1
Дякую! Саме в цьому була проблема. libQt5DBus.so.5 повинен бути вказаний у документації разом із core та gui.
dzlatkov

4
У моєму випадку sudo apt-get install libx11-xcb1вирішено проблему. Але ваша рекомендація щодо використання lddсаме те, що підказало мені правильну бібліотеку для встановлення. Дякую!
Даніель

4
У моєму випадку мені також довелося додати libQt5XcbQpa.so.5 до папки lib.
elsamuko

4
Якщо ця проблема все ще залишається після проходження ldd, спробуйте знайти plugins/platformsкаталог у вашій установці Qt. Спробуйте скопіювати весь цей каталог туди ж, де і ваш двійковий або спільний бібліотечний файл. Якщо це працює, ви можете встановити LD_LIBRARY_PATH(Hacky) або, як зазначено у відповіді за @bossbarber, QT_QPA_PLATFORM_PLUGIN_PATH.
csl

1
У моєму випадку у мене не було створено папку / usr / bin / платформи. Вирішено за допомогою: sudo ln -sf / usr / lib / x86_64-linux-gnu / qt5 / plugins / platform / / usr / bin /
gipsh

55

Як було опубліковано раніше, вам потрібно переконатися, що ви встановлюєте плагіни платформи під час розгортання програми. Залежно від того, як ви хочете розгорнути речі, існує два методи, щоб повідомити вашій програмі, де знаходяться плагіни платформи (наприклад, platform / plugins / libqxcb.so), які можуть працювати для вас.

Перший - експортувати шлях до каталогу через змінну 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

Інший варіант, який я віддаю перевагу, - це створити файл qt.conf у тому ж каталозі, що і ваш виконуваний файл. Зміст яких буде:

[Paths]
Plugins=/path/to/plugins

Більше інформації щодо цього можна знайти тут і за допомогою qt.conf


1
Оце Так! Дуже дякую! Не знав про qt.conf, він повинен на першій сторінці поширених запитань про розгортання

у моєму випадку з якихось причин шлях до qt.conf (плагіни = плагіни) не був розпізнаний. У підсумку я поставив порожній файл qt.conf, який дозволив глобальним (жорстко закодованим) шляхам перезаписуватись за замовчуванням qt.conf, у моєму випадку плагіни-підпапки в каталозі app.
B Piltz

1
Ми дивувались, чому LD_LIBRARY_PATHне працює, але QT_QPA_PLATFORM_PLUGIN_PATHзробили трюк. Супер-дякую.
Ахмед Фасіх

1
Другий чи третій раз, коли я приходжу до цієї відповіді, і це допомагає щоразу.
kyb

26

Я спробував запустити свій двійковий файл, скомпільований з Qt 5.7, на Ubuntu 16.04 LTS, де 5.5попередньо встановлений Qt . Це не спрацювало.

Спочатку я перевірив сам двійковий файл, 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для цього, як запропоновано у прийнятій відповіді).

Вивід команди може виглядати так:

me@xerus:/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=.). Повторюйте цей процес, доки не будуть задоволені всі залежності.

PS дякую автору цієї відповіді за QT_DEBUG_PLUGINS=1.


1
Я виявив, що, хоча існували невизначені залежності від libQt5xcbQpa.so.5 та libQtDBus.so.5, мені все одно потрібно було додати папку платформ, як ви вказали. ЦЕ поєднання змусило це працювати.
BSD

Хто-небудь може вказати мені пояснення "Для чайників", як виправити цю помилку? Я не уявляю, що означає щось із цього, мені потрібні покрокові інструкції щодо того, як це вирішити в Linux.
Джон Сміт,

@JohnSmith, краще, якщо ти скажеш нам, що саме для тебе не має сенсу. Тоді ми спробуємо детальніше розробити.
Нейромедіатор

11

Ubuntu 16.04 64 біт. Я отримав проблему, мабуть, без причин. Напередодні, коли я переглянув фільм на своєму екземплярі VideoLan, тієї ночі я хотів би переглянути ще один із VideoLan. VLC просто не хотів запускати через помилку у питанні. Я трохи погуглив і знайшов рішення, яке вирішило мою проблему: відтепер VLC працює, як і раніше. Рішення полягає в наступній команді:

sudo ln -sf /usr/lib/x86_64-linux-gnu/qt5/plugins/platforms/ /usr/bin/

Я не можу пояснити, які наслідки цього мають, але я знаю, що це створює якесь відсутні символічне посилання.


2
Не використовуйте -f --forceпрапор, поки У насправді не знаєте, що ви робите. Це може спричинити інші проблеми.
kyb

Це вирішило це для мене за допомогою Ubuntu 18.04 (проблема, у якої проблема - Rescue Time.) Просто залиште прапорець -f, якщо у вас там уже є каталог.
Елофф,

10

Я спробував основні частини кожної відповіді, але безрезультатно. Що, нарешті, це виправило для мене, це експортувати такі змінні середовища:

LD_LIBRARY_PATH=/usr/local/lib:~/Qt/5.9.1/gcc_64/lib
QT_QPA_PLATFORM_PLUGIN_PATH=~/Qt/5.9.1/gcc_64/plugins/ 

Це працювало для мене в Ubuntu 17.10 (але ця проблема виникає з 16.04!) export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/lib/x86_64-linux-gnu/. На жаль, це лише виправило мій VLC, а не Virtualbox, що має таку ж помилку ...
Хвости

Працював в Ubuntu 18.04, щоб запустити і запустити texworks 0.6.2.
XavierStuvw

8

Починаючи з версії 5, Qt використовує систему абстракції платформи (QPA) для абстрагування від базової платформи.

Реалізація для кожної платформи забезпечується плагінами. Для X11 це плагін XCB. Докладнішу інформацію про залежності див. У розділі " Вимоги до Qt для X11" .


Отже, мені просто потрібно встановити всі пакети зі списку залежностей? І це спрацює? Також я знайшов файл libqxcb.so в папці QT SDK, але розміщення його в каталозі usr / lib не вирішило моєї проблеми.
locomotion

Сторінка Розгортання програми на платформах X11 повинна містити всю необхідну інформацію.
закрити

Я встановив усі пакети, згадані на цій сторінці, але це не допомогло. Я знайшов інформацію, що плагіни платформи повинні бути в каталозі виконуваного файлу в папці "платформи". Я поклав туди плагін xcb, тепер помилка змінилася: "Не вдалося завантажити плагін платформи" xcb ". Доступні платформи: xcb"
locomotion

1
@cloose Знову мертвий :(
user89

@ user89 не для мене. тимчасова проблема, можливо?
закрити

6

Напевно, це допоможе. Я використовую Ubuntu 18.04 і коли встановлював Krita за допомогою методу ppa. Я отримав цю помилку:

Не вдалося запустити цю програму, оскільки вона не змогла знайти або завантажити плагін платформи Qt "xcb" у "".

Доступні плагіни платформи: linuxfb, minimal, minimalegl, offscreen, wayland-egl, wayland, xcb.

Повторна інсталяція програми може вирішити цю проблему. Перервано

Я без успіху спробував усі рішення, які я знайшов у цій темі та інших веб-сайтах.

Нарешті, я знайшов допис, де автор згадує, що можна активувати налагодження, сказане про qt5, за допомогою цієї простої команди:

export QT_DEBUG_PLUGINS=1

Після додавання цієї команди я запускаю ще раз krita, у мене трапляється та сама помилка, що і зараз я знаю причину.

libxcb-xinerama.so.0: не вдається відкрити спільний об'єктний файл: такого файлу або каталогу немає.

Ця помилка перешкоджає правильному завантаженню "xcb". Тож рішення буде встановити `libxcb-xinerama.so.0" правильно? Однак, коли я запускаю команду:

sudo apt install libxcb-xinerama

Я встановив lib. Тож я використав старий трюк, так--reinstall

sudo apt install --reinstall libxcb-xinerama

Ця остання команда вирішила мою проблему.


6

Причин цієї проблеми може бути багато. Ключ у використанні

export QT_DEBUG_PLUGINS=1

перед запуском програми Qt. Потім перевірте вихідні дані, які вкажуть на напрямок помилки. У моєму випадку це було:

Cannot load library /opt/nao/plugins/platforms/libqxcb.so: (/opt/nao/bin/../lib/libz.so.1: version `ZLIB_1.2.9' not found (required by /usr/lib/x86_64-linux-gnu/libpng16.so.16))

Але це вирішується різними потоками. Див., Наприклад, https://stackoverflow.com/a/50097275/2408964 .


: facepalm: OMG, ця ж порада ЗНО. Ні, це не надає ніякої корисної інформації, лише набагато детальніша версія тієї самої точної помилки. Жодних натяків чи підказок, на що б ще не дивитись. Нічого не бракує, нічого "не можна завантажити", чого я ще не знав.
Джон Сміт,

2

З тією ж проблемою я зіткнувся і після встановлення Viber. У ньому були всі необхідні бібліотеки qt в /opt/viber/plugins/. Я перевірив залежності /opt/viber/plugins/platforms/libqxcb.soта знайшов відсутні залежності. Вони були libxcb-render.so.0, libxcb-image.so.0, libxcb-icccm.so.4, libxcb-xkb.so.1 Так що я вирішив мою проблему, встановивши відсутні пакети з цією бібліотекою:

apt-get install libxcb-xkb1 libxcb-icccm4 libxcb-image0 libxcb-render-util0


У мене виникла проблема із запуском Tizen Emulator. Це допомогло. Дякую.
AlexM

2

Отже, я витратив близько доби, намагаючись зрозуміти, в чому проблема; спробував усі запропоновані рішення, але жодне з них не працювало, як установка xcb libs або експорт папки плагінів Qt. Рішення, яке пропонувалось використовувати QT_DEBUG_PLUGINS=1для налагодження проблеми, не дало мені прямого розуміння, як у відповіді - натомість я отримував щось про невирішені символи в Qt5Core.

Однак це дало мені підказку: а що, якщо він намагається використовувати різні файли з різних установок Qt? На моїй машині у мене була встановлена ​​стандартна версія /home/username/Qt/та деякі локальні збірки в моєму проекті, які я скомпілював сам (у мене є також інші власноруч створені комплекти, а також в інших місцях). Кожного разу, коли я намагався використовувати будь-який з наборів (встановлених інструментом обслуговування Qt або створених власноруч), я отримував "помилку xcb".

Рішення було простим: надайте шлях Qt, CMAKE_PREFIX_PATHа не так, Qt5_DIRяк я це зробив, і це вирішило проблему. Приклад:

cmake .. -DCMAKE_PREFIX_PATH=/home/username/Qt/5.11.1/gcc_64


О, чоловіче, що це у світі Linux, де кожне окреме рішення в Інтернеті замість того, щоб працювати, дає несподівані помилки? Ніколи? Три дні намагаємось отримати робочий робочий стіл на складовій установці Ubuntu. Ні, для тих, хто приходить сюди від Google: це рішення працює не краще, ніж будь-що інше на цій сторінці. Я починаю думати, що Linux насправді взагалі не працює.
Джон Сміт,

2

Я зіткнувся з дуже подібною проблемою з тим самим повідомленням про помилку. Спочатку налагодьте деякі, увімкнувши принтер Qt Debug за допомогою командного рядка:

експортувати QT_DEBUG_PLUGINS = 1

і повторно запустіть програму. Для мене це виявило наступне:

"Не вдається завантажити бібліотеку /home/.../miniconda3/lib/python3.7/site-packages/PyQt5/Qt/plugins/platforms/libqxcb.so: (libxkbcommon-x11.so.0: не вдається відкрити спільний файл об'єкта: Немає такого файлу або каталогу) "

"Не вдається завантажити бібліотеку /home/.../miniconda3/lib/python3.7/site-packages/PyQt5/Qt/plugins/platforms/libqxcb.so: (libxkbcommon-x11.so.0: не вдається відкрити спільний файл об'єкта: Немає такого файлу або каталогу) "

Справді, мені не вистачало libxkbcommon-x11.so.0 та libxkbcommon-x11.so.0. Далі перевірте свою архітектуру за допомогою dpkg з командного рядка linux. (Для мене команда "арка" дала інший і непотрібний результат)

dpkg --print-architecture #result for me: amd64

Потім я погуглив "libxkbcommon-x11.so.0 ubuntu 18.04 amd64", а також для libxkbcommon-x11.so.0, який видає ці пакети на package.ubuntu.com. Це сказала мені, що, як це не дивно, я пропускаю пакети під назвою libxkbcommon-x11-0 і libxkbcommon0, і що встановлення цих пакетів буде включати необхідні файли, але версії розробників цього не робитимуть. Тоді рішення:

sudo apt-get update

sudo apt-get install libxkbcommon0

sudo apt-get install libxkbcommon-x11-0


1

У моєму випадку мені потрібно було розгорнути дві програми Qt на гості віртуального ящика Ubuntu. Один з них був командним рядком ("app"), інший GUI_based ("app_GUI").

Я використав додаток ldd, щоб з’ясувати, які потрібні бібліотеки, і скопіював їх до гостя Ubuntu. Незважаючи на те, що виконуваний "додаток" командного рядка працював нормально, виконуваний файл на основі графічного інтерфейсу аварійно працював, що видало помилку "Не вдалося завантажити плагін платформи" xcb ". Я перевірив ldd на наявність libxcb.so, але і в цьому не було відсутніх залежностей.

Проблема, здавалося, полягала в тому, що, хоча я скопіював усі потрібні бібліотеки, випадково скопіював також бібліотеки, які вже були в гостьовій системі .. це означає, що (а) спочатку їх було не потрібно копіювати і (б) гірше , їх копіювання спричинило несумісність між бібліотеками встановлення. Гірше того, ldd їх не виявив, як я вже казав ..

Рішення? Переконайтеся, що ви копіюєте бібліотеки, які ldd відображає як відсутні, і абсолютно відсутні додаткові бібліотеки .


І, я виправляю свою проблему, використовуючи цю пораду, як?
Джон Сміт,

1

У моєму випадку відсутні файли заголовків були причиною того libxcb, що Qt не створив. Встановивши їх відповідно до https://wiki.qt.io/Building_Qt_5_from_Git#Linux.2FX11, вирішено проблему:

yum install libxcb libxcb-devel xcb-util xcb-util-devel mesa-libGL-devel libxkbcommon-devel

1
Так, я думаю, у мене була подібна проблема. Навіть компілював qt з джерела, але не помітив, що xcb-toolchain не був розумним у моїй системі, тому частини qt-xcb не встановлювались.
shevy

1

Мені подобається рішення з qt.conf.

Поставте qt.confпоруч із виконуваним файлом з наступними рядками:

[Paths]
Prefix = /path/to/qtbase

І це працює як шарм: ^)

Для робочого прикладу:

[Paths]
Prefix = /home/user/SDKS/Qt/5.6.2/5.6/gcc_64/

Документація щодо цього знаходиться тут: https://doc.qt.io/qt-5/qt-conf.html


І я "поставив qt.conf поруч із виконуваним файлом", як саме?
Джон Сміт,

Створити файл із представленим вмістом. cd path/to/executable; vim qt.conf, вставити. Збережіть і вийдіть.
kyb

0

Я пов'язую всі матеріали Qt статично із загальними збірками Linux моїх проектів з відкритим кодом. Це трохи полегшує життя. Вам просто потрібно спочатку створити статичні версії бібліотек Qt. Звичайно, це не можна застосовувати до програмного забезпечення із закритим кодом через проблеми з ліцензуванням. В даний час розгортання програм Qt5 на Linux є дещо проблематичним, оскільки, наприклад, Ubuntu 12.04 не має бібліотек Qt5 у сховищах пакетів.


0

У мене була ця проблема, і я напевно видалив конфігурації Qt зі свого середовища. Тобто,

rm -rf ~/.config/Qt*

Потім я запустив qtcreator, і він змінився на існуючий стан машини. Я вже не пам’ятав, де були мої проекти, але це просто означало, що мені довелося переглядати їх знову «вперше».

Але що ще важливіше, він створив собі узгоджений набір бібліотечних шляхів, тому я міг перебудувати і знову запустити виконувані файли проекту, не втрачаючи бібліотеки xcb або qxcb.


Qtcreator видає ту саму точну помилку, яку я намагаюся вирішити. Звичайно. Тому що якби я знайшов стільки робочого рішення будь-якої проблеми Linux в Інтернеті, це не був би Linux. Вибачте, це просто неймовірно розчаровує, ціла сторінка SE з дикими гусячими погонями без єдиного корисного рішення на ній, щоб просто отримати панель робочого столу, що працює під час встановлення Ubuntu без помилок. Я стаю дуже сумнівним, що Linux насправді працює правильно взагалі.
Джон Сміт,

У моєму випадку це не допомогло.
Євген Гр. Філіппов

-4

sudo ln -sf /usr/lib/...."adapt-it"..../qt5/plugins/platforms/ / usr / bin /

Це створює символічне посилання, яке він пропустив. Добре для QT! Добре для VLC !!


2
поясніть свою відповідь
Anantha Raju C 02

Не працює. Бо нічого не працює. Ця сторінка помилкова на 100%, навіть жодне з «рішень» тут не працює.
Джон Сміт,

@JohnSmith, судячи за кількістю голосів за відповіді, деякі з них, безумовно, працюють для деяких людей. На жаль, у вас нічого не працює, і я можу зрозуміти ваше розчарування. Але якщо нічого не виходить, спробуйте провести власне дослідження та надішліть відповідь, яка спрацювала у вашому випадку. Я маю на увазі, давай, ти використовуєш платформу протягом 5 років і маєш лише 6 відповідей? Я покірно пропоную повернути громаді, а не скаржитися. Ми тут, щоб допомогти одне одному.
Нейромедіатор
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.