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

Я написал приложение для Linux, использующее Qt5.

Но когда я пытаюсь запустить его в Linux без установленного Qt SDK, вывод в консоли будет:

Не удалось загрузить плагин платформы «xcb». Доступные платформы:

Как я могу это исправить? Может мне нужно скопировать какой-нибудь файл плагина? Когда я использую ubuntu с установленным Qt5, но переименовываю каталог Qt, возникает та же проблема. Итак, он использует какой-то файл из каталога Qt ...

ОБНОВЛЕНИЕ: когда я создаю в каталоге приложения папку «платформы» с файлом libqxcb.so, приложение по-прежнему не запускается, но сообщение об ошибке меняется:

Не удалось загрузить плагин платформы «xcb». Доступные платформы:

xcb

Как такое могло случиться? Как плагин платформы может быть доступен, но не может быть загружен?


person locomotion    schedule 14.06.2013    source источник
comment
Просто чтобы уточнить, установлены ли библиотеки Qt на самом деле?   -  person cmannett85    schedule 14.06.2013
comment
Если установлена ​​библиотека Qt, программа работает нормально. Если он не установлен или каталог qt sdk не найден, программа не работает.   -  person locomotion    schedule 14.06.2013
comment
Убедитесь, что вы также скопировали libQt5Gui.so.5   -  person edaniels    schedule 08.07.2013
comment
Для тех, кто пришел сюда из программы запуска Eve Online: используйте eveonline.sh, а не eveonline - в программе запуска есть все библиотеки, связанные со специальными версиями.   -  person Ondra Žižka    schedule 13.03.2017
comment
Мои проблемы были решены с помощью python 3.8, а не 3.7 для тех, кто использует python.   -  person JareBear    schedule 07.12.2020


Ответы (17)


Используйте ldd (man ldd), чтобы показать зависимости разделяемых библиотек. Запускаем это на libqxcb.so

.../platforms$ ldd libqxcb.so

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

person Abe Mishler    schedule 30.08.2013
comment
Спасибо! В этом и заключалась проблема. libQt5DBus.so.5 должен быть указан в документации вместе с ядром и графическим интерфейсом. - person dzlatkov; 20.06.2014
comment
В моем случае проблема была решена sudo apt-get install libx11-xcb1. Но именно ваша рекомендация использовать ldd указала мне на правильную библиотеку для установки. Спасибо! - person Daniel; 17.03.2015
comment
В моем случае мне также пришлось добавить libQt5XcbQpa.so.5 в папку lib. - person elsamuko; 21.11.2015
comment
Если у вас все еще есть эта проблема после прохождения ldd, попробуйте найти каталог plugins/platforms в вашей установке Qt. Попробуйте скопировать весь этот каталог в то же место, что и ваш двоичный файл или файл общей библиотеки. Если это сработает, вы можете установить LD_LIBRARY_PATH (хакерский) или, как указано в ответе @bossbarber, QT_QPA_PLATFORM_PLUGIN_PATH. - person csl; 06.10.2016
comment
В моем случае у меня не было созданного каталога / usr / bin / platform. Решено с помощью: sudo ln -sf / usr / lib / x86_64-linux-gnu / qt5 / plugins / platform / / usr / bin / - person gipsh; 13.03.2017
comment
Я пытался развернуть свое приложение QT. Копирование папки платформы в мою папку .so сработало для меня. Ой! и не забудьте добавить LD_LIBRARY_PATH = / folderWith_.so_and_Platform - person A.k.; 21.01.2020
comment
Я хотел бы, чтобы были простые инструкции, чтобы кто-то, у кого не было диплома электронного инженера, мог получить простой сервер Linux, пригодный для использования и работающий. Я не могу понять ни слова из этого. У меня есть стандартная установка Ubuntu, я ничего не настраивал, и после 3 дней работы и поиска в Google у меня нет рабочего стола. Почему так сложно начать бегать? - person John Smith; 26.05.2020

Как было опубликовано ранее, вам необходимо убедиться, что вы устанавливаете плагины платформы при развертывании приложения. В зависимости от того, как вы хотите что-то развернуть, есть два метода, чтобы сообщить вашему приложению, где плагины платформы (например, платформы / плагины / libqxcb.so) находятся во время выполнения, которые могут сработать для вас.

Первый - экспортировать путь к каталогу через переменную QT_QPA_PLATFORM_PLUGIN_PATH.

QT_QPA_PLATFORM_PLUGIN_PATH=path/to/plugins ./my_qt_app

or

export QT_QPA_PLATFORM_PLUGIN_PATH=path/to/plugins
./my_qt_app

Другой вариант, который я предпочитаю, - это создать файл qt.conf в том же каталоге, что и ваш исполняемый файл. Содержимое которого будет:

[Paths]
Plugins=/path/to/plugins

Дополнительную информацию об этом можно найти здесь и при использовании qt.conf

person bossbarber    schedule 22.08.2014
comment
Вау! Большое спасибо! Не знал о qt.conf, он должен быть на первой странице FAQ по развертыванию - person ; 18.12.2014
comment
в моем случае по какой-то причине путь внутри qt.conf (Plugins = plugins) не был распознан. Я закончил тем, что предоставил пустой файл qt.conf, который позволил глобальным (жестко закодированным) путям перезаписывать значения по умолчанию qt.conf, в моем случае подпапку plugins-Subfolder в app-directory. - person B Piltz; 06.09.2016
comment
Нам было интересно, почему LD_LIBRARY_PATH не работает, но QT_QPA_PLATFORM_PLUGIN_PATH помогло. Супер-спасибо. - person Ahmed Fasih; 15.02.2018
comment
2-й или 3-й раз я прихожу к этому ответу, и каждый раз он помогает. - person kyb; 11.11.2018

Я попытался запустить свой двоичный файл, скомпилированный с Qt 5.7, на Ubuntu 16.04 LTS, где Qt 5.5 предустановлен. Это не сработало.

Сначала я проверил сам двоичный файл с помощью 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=.). Повторяйте этот процесс, пока не будут удовлетворены все зависимости.

P.S. спасибо автору этого ответа за QT_DEBUG_PLUGINS=1.

person Neurotransmitter    schedule 27.09.2016
comment
Я обнаружил, что хотя и были неуказанные зависимости от libQt5xcbQpa.so.5 и libQtDBus.so.5, мне все еще нужно было добавить папку платформ, как вы указываете. ЭТА комбинация заставила его работать. - person BSD; 17.11.2017
comment
Может ли кто-нибудь указать мне на объяснение для чайников, как исправить эту ошибку? Я понятия не имею, что все это означает, мне нужны пошаговые инструкции, как решить эту проблему в Linux. - person John Smith; 26.05.2020
comment
@JohnSmith, лучше, если ты расскажешь нам, что именно не имеет для тебя никакого смысла. Потом попробуем уточнить. - person Neurotransmitter; 26.05.2020

Я пробовал основные части каждого ответа, но безрезультатно. Что в конечном итоге исправило для меня, так это экспорт следующих переменных среды:

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/ 
person Alan    schedule 14.08.2017
comment
У меня это сработало на Ubuntu 17.10 (но эта проблема возникла с 16.04!) export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/lib/x86_64-linux-gnu/. К сожалению, он исправил только мой VLC, а не Virtualbox, который имеет ту же ошибку ... - person Tails; 23.11.2017
comment
Работал в Ubuntu 18.04, чтобы запустить texworks 0.6.2. - person XavierStuvw; 19.11.2019
comment
у меня это сработало отлично .. спасибо. - person Sayed Sohan; 02.03.2021

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

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

Я не могу объяснить, каковы его последствия, но я знаю, что это создает некоторую недостающую символическую ссылку.

person Francesco    schedule 19.10.2016
comment
Не используйте -f --force флаг, пока U действительно не поймет, что вы делаете. Это может вызвать другие проблемы. - person kyb; 15.12.2017
comment
Это было то, что решило эту проблему для меня с Ubuntu 18.04 (приложение, в котором возникла проблема, - Rescue Time). Просто оставьте флаг -f, если у вас уже есть каталог. - person Eloff; 04.09.2018

Начиная с версии 5, Qt использует систему абстракции платформы (QPA) для абстрагирования от лежащая в основе платформа.

Реализация для каждой платформы обеспечивается плагинами. Для X11 это плагин XCB. См. требования Qt для X11 для получения дополнительной информации о зависимостях.

person cloose    schedule 14.06.2013
comment
Итак, мне просто нужно установить все пакеты из списка зависимостей? И это сработает? Также я нашел файл libqxcb.so в каталоге QT SDK, но его размещение в каталоге usr / lib не решило мою проблему. - person locomotion; 14.06.2013
comment
Страница Развертывание приложения на платформах X11 должна содержать вся необходимая информация. - person cloose; 14.06.2013
comment
Я установил все пакеты, упомянутые на этой странице, но это не помогло. Я нашел информацию, что плагины платформы должны находиться в каталоге исполняемого файла в папке платформ. Я поставил там плагин xcb, теперь ошибка изменилась: Не удалось загрузить плагин платформы xcb. Доступные платформы: xcb - person locomotion; 15.06.2013
comment
@cloose Он снова мертв :( - person user89; 14.12.2015
comment
@ user89 не для меня. может временная проблема? - person cloose; 16.12.2015

У этой проблемы может быть много причин. Ключ в том, чтобы использовать

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.

person untill    schedule 04.02.2019
comment
: facepalm: ОМГ, это же совет СНОВА. Нет, это не дает никакой полезной информации, просто гораздо более подробная версия той же самой ошибки. Никаких намеков или подсказок, на что еще можно было бы взглянуть. Ничего не пропало, ничего не загружается, о чем я еще не знал. - person John Smith; 26.05.2020

Наверное, эта информация поможет. Я был на 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

Библиотека уже установлена. Что теперь, Тео? Ну, тогда я использовал старый трюк :) Ага, тот --reinstall

sudo apt install --reinstall libxcb-xinerama

TL; DR: эта последняя команда решила мою проблему.

person Teocci    schedule 12.07.2018

Итак, я потратил около дня, пытаясь выяснить, в чем проблема; попробовал все предложенные решения, но ни один из них не работал, как установка 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

person vicrucann    schedule 18.07.2018
comment
Ой, боже, что там с миром Linux, где каждое решение в сети дает неожиданные ошибки вместо того, чтобы работать? Всегда? Вот уже три дня, как я пытаюсь получить рабочий стол на стандартной версии Ubuntu. Нет, для тех, кто пришел сюда из Google: это решение работает не лучше, чем все остальное на этой странице. Я начинаю думать, что Linux вообще не работает. - person John Smith; 26.05.2020

Я столкнулся с очень похожей проблемой с тем же сообщением об ошибке. Во-первых, отладьте некоторые, включив принтер 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 # результат для меня: amd64

Затем я погуглил libxkbcommon-x11.so.0 ubuntu 18.04 amd64, а также для libxkbcommon-x11.so.0, что дает эти пакеты на packages.ubuntu.com. Оглядываясь назад, я понял, что неудивительно, что мне не хватает пакетов, называемых libxkbcommon-x11-0 и libxkbcommon0, и что установка этих пакетов будет включать необходимые файлы, а версии для разработчиков - нет. Тогда решение:

sudo apt-get update

sudo apt-get install libxkbcommon0

sudo apt-get install libxkbcommon-x11-0

person Schroeder    schedule 12.03.2020

Я столкнулся с такой же проблемой при установке Viber. В /opt/viber/plugins/ были все необходимые библиотеки qt. Я проверил зависимости /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

person Sergey P. aka azure    schedule 17.06.2016
comment
У меня возникла проблема с запуском эмулятора Tizen. Это помогло. Спасибо. - person AlexM; 07.11.2017

Мне нравится решение с 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

person kyb    schedule 07.02.2018
comment
И я поставил qt.conf рядом с исполняемым файлом, как именно? - person John Smith; 26.05.2020
comment
Создать файл с представленным контентом. cd path/to/executable; vim qt.conf, вставить. Сохранить и выйти. - person kyb; 26.05.2020

В моем случае мне нужно было развернуть два приложения Qt на гостевом виртуальном ящике Ubuntu. Один был командной строкой («приложение»), другой - с графическим интерфейсом («app_GUI»).

Я использовал «ldd app», чтобы узнать, какие библиотеки необходимы, и скопировал их в гостевую систему Ubuntu. В то время как исполняемый файл "приложение" командной строки работал нормально, исполняемый файл с графическим интерфейсом вылетал из строя, давая ошибку "Не удалось загрузить плагин платформы" xcb ". Я проверил ldd на наличие libxcb.so, но это тоже не имел отсутствующих зависимостей.

Проблема, казалось, заключалась в том, что, хотя я скопировал все нужные библиотеки, я случайно скопировал также библиотеки, которые уже присутствовали в гостевой системе ... это означает, что (а) в них не было необходимости копировать их в первую очередь и (б) хуже , их копирование привело к несовместимости между установочными библиотеками. Что еще хуже, они не были обнаружены ЛДД, как я уже сказал ...

Решение? Убедитесь, что вы копируете библиотеки, показанные ldd как отсутствующие, и никаких дополнительных библиотек.

person Giorgos Sfikas    schedule 28.11.2015
comment
И я решаю свою проблему с помощью этого совета, как? - person John Smith; 26.05.2020


Я связываю все материалы Qt статически с общими сборками Linux моих проектов с открытым исходным кодом. Это немного облегчает жизнь. Вам просто нужно сначала создать статические версии библиотек Qt. Конечно, это не может быть применено к программному обеспечению с закрытым исходным кодом из-за проблем с лицензированием. Развертывание приложений Qt5 в Linux в настоящее время немного проблематично, потому что, например, Ubuntu 12.04 не имеет библиотек Qt5 в репозиториях пакетов.

person juzzlin    schedule 26.12.2013

У меня была эта проблема, и я догадывался, что удалил Qt Configs из своей среды. Т.е.,

rm -rf ~/.config/Qt*

Затем я запустил qtcreator, и он перенастроил себя в соответствии с существующим состоянием машины. Он больше не запоминал, где находились мои проекты, но это просто означало, что мне нужно было перейти к ним «впервые» снова.

Но что еще более важно, он создал согласованный набор путей к библиотекам, так что я мог заново собрать и запустить исполняемые файлы проекта без пропадания библиотек xcb или qxcb.

person Blair Houghton    schedule 31.08.2018
comment
Qtcreator выдает ту же самую ошибку, которую я пытаюсь решить. Конечно. Потому что, если бы я нашел хоть одно рабочее решение любой проблемы Linux в сети, это был бы не Linux. Извините, это просто невероятно расстраивает, целая страница SE, посвященная погоням за дикими гусями, без единого полезного решения на ней, чтобы просто запустить панель рабочего стола на стандартной установке Ubuntu без ошибок. Я все больше сомневаюсь, что Linux вообще работает правильно. - person John Smith; 26.05.2020
comment
В моем случае это не помогло. - person Eugene Gr. Philippov; 22.07.2020

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

Он создает символическую ссылку, которую пропустил. Хорошо для QT! Хорошо для VLC !!

person jujuuj    schedule 02.02.2017
comment
Поясните свой ответ - person Anantha Raju C; 02.02.2017
comment
Не работает. Потому что ничего не работает. Эта страница на 100% неверна, ни одно из решений здесь не работает. - person John Smith; 26.05.2020
comment
@JohnSmith, судя по количеству голосов за ответы, некоторые из них определенно работают для некоторых людей. К сожалению, у вас ничего не работает, и я понимаю ваше разочарование. Но если ничего не работает, попробуйте провести собственное исследование и представить ответ, который сработал в вашем случае. То есть, да ладно, вы пользуетесь платформой 5 лет и имеете только 6 ответов? Я смиренно предлагаю отдать деньги сообществу вместо того, чтобы жаловаться. Мы здесь, чтобы помогать друг другу. - person Neurotransmitter; 17.06.2020