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

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

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

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

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

UPDATE: когда я создаю в папке "платформы" приложений с файлом libqxcb.so, приложение все еще не запускается, но сообщение об ошибке изменяется:

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

XCB

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

Ответ 1

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

.../platforms$ ldd libqxcb.so

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

Ответ 2

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

Ответ 3

Я попытался запустить мой двоичный файл, скомпилированный с 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" была 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 переменной среды QT_DEBUG_PLUGINS=1 чтобы проверить, какие зависимости libqxcb.so удовлетворены. (Вы также можете использовать ldd для этого, как предложено в принятом ответе).

Вывод команды может выглядеть так:

[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)

Обратите внимание на неисправную библиотеку libQt5DBus.so.5. Скопируйте его в путь к вашей библиотеке, в моем случае это был тот же каталог, в котором находится мой двоичный файл (отсюда LD_LIBRARY_PATH=.). Повторяйте этот процесс, пока все зависимости не будут удовлетворены.

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

Ответ 4

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

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

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

Ответ 5

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

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

Ответ 6

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

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/ 

Ответ 7

В моем случае мне нужно было развернуть два приложения Qt на виртуальном хосте Ubuntu. Одним из них была командная строка ( "приложение" ), другая GUI_based ( "app_GUI" ).

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

Проблема заключалась в том, что, хотя я копировал все нужные библиотеки, я случайно скопировал также библиотеки, которые уже присутствовали в гостевой системе. Это означало, что (а) им было необязательно копировать их в первую очередь и ( б) хуже, копирование их привело к несовместимости между библиотеками установки. Хуже того, они не были обнаружены ldd, как я сказал.

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

Ответ 8

У меня возникла такая же проблема, когда после установки 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

Ответ 9

Вероятно, это поможет. Я использую Ubuntu 18.04 и когда я установил Krita, используя метод ppa. Я получил эту ошибку:

Не удалось запустить это приложение, так как не удалось найти или загрузить плагин платформы Qt "xcb" в "".

Доступные плагины платформы: linuxfb, минимальный, минималегл, 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

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

Ответ 10

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

Ответ 11

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

Ответ 12

Мне нравится решение с qt.conf.

Поместите qt.conf рядом с исполняемым файлом со следующими строками:

[Paths]
Prefix = /path/to/qtbase

И это работает как шарм: ^)

Ответ 13

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

rm -rf ~/.config/Qt*

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

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

Ответ 14

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

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))

Но это решается в разных темах. Смотрите, например, fooobar.com/questions/15001810/....

Ответ 15

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

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