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


101

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

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

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

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

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

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

xcb

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


1
Чтобы уточнить, установлены ли библиотеки Qt на самом деле?
cmannett85

1
Если установлена ​​библиотека Qt, программа работает нормально. Если он не установлен или каталог qt sdk не найден, программа не работает.
Передвижение

Убедитесь, что вы также скопировали libQt5Gui.so.5
edaniels 08

1
Для тех, кто пришел сюда из программы запуска Eve Online: используйте eveonline.sh, а не eveonline- в программе запуска есть все библиотеки, связанные со специальными версиями.
Ondra

Ответы:


59

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

.../platforms$ ldd libqxcb.so

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


1
Спасибо! В этом и заключалась проблема. libQt5DBus.so.5 должен быть указан в документации вместе с ядром и графическим интерфейсом.
dzlatkov

4
В моем случае sudo apt-get install libx11-xcb1проблема решена. Но именно ваша рекомендация по использованию lddуказала мне на правильную библиотеку для установки. Благодарность!
Daniel

4
В моем случае мне также пришлось добавить libQt5XcbQpa.so.5 в папку lib.
elsamuko

5
Если у вас все еще есть эта проблема после прохождения ldd, попробуйте найти plugins/platformsкаталог в вашей установке Qt. Попробуйте скопировать весь этот каталог в то же место, что и ваш двоичный файл или файл общей библиотеки. Если это работает, вы можете установить LD_LIBRARY_PATH(Hacky) или, как указано в ответе по @bossbarber, QT_QPA_PLATFORM_PLUGIN_PATH.
csl 06

1
В моем случае у меня не было созданного каталога / usr / bin / platform. Решено с помощью: sudo ln -sf / usr / lib / x86_64-linux-gnu / qt5 / plugins / platform / / usr / bin /
gipsh

56

Как было опубликовано ранее, вам необходимо убедиться, что вы установили плагины платформы при развертывании приложения. В зависимости от того, как вы хотите что-то развернуть, есть два способа сообщить вашему приложению, где плагины платформы (например, платформы / плагины / 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, он должен быть на первой странице FAQ по развертыванию

в моем случае по какой-то причине путь внутри qt.conf (Plugins = plugins) не был распознан. Я закончил тем, что предоставил пустой файл qt.conf, который позволил глобальным (жестко закодированным) путям перезаписывать значения по умолчанию qt.conf, в моем случае подпапку plugins-Subfolder в каталоге app.
B Piltz

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

1
Второй или третий раз я прихожу к этому ответу, и каждый раз он помогает.
kyb

27

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

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, если у вас уже есть каталог.
Eloff

11

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

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, который имеет ту же ошибку ...
Tails

Работал в Ubuntu 18.04, чтобы запустить texworks 0.6.2.
XavierStuvw

8

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

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


Итак, мне просто нужно установить все пакеты из списка зависимостей? И это сработает? Также я нашел файл libqxcb.so в каталоге QT SDK, но его размещение в каталоге usr / lib не решило мою проблему.
передвижение

Страница « Развертывание приложения на платформах 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

Я установил библиотеку. Так что я использовал старый трюк, да--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: ОМГ, это же совет СНОВА. Нет, это не дает никакой полезной информации, просто гораздо более подробная версия той же самой ошибки. Никаких намеков или подсказок, на что еще можно было бы взглянуть. Ничего не пропало, ничего не «не загружается», о чем я еще не знал.
Джон Смит

3

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

Затем я поискал в Google "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


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. Это помогло. Спасибо.
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 вообще не работает.
Джон Смит

1

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

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

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

Решение? Убедитесь, что вы копируете библиотеки, показанные 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

Не работает. Потому что ничего не работает. Эта страница на 100% неверна, ни одно из "решений" здесь не работает.
Джон Смит

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