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


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

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

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

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

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

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

xcb

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

14 74

14 ответов:

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

.../platforms$ ldd libqxcb.so

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

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

Я попытался запустить свой двоичный файл, скомпилированный с 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.

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

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

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

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

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

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

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/ 

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

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

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

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

я столкнулся с той же проблемой, когда после установки Вайбер. Он имел все необходимые библиотеки 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

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

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

[Paths]
Prefix = /path/to/qtbase

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

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

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

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

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

переустановка приложения может решить эту проблему. Прервано

Я пробовал все решения, которые я нашел в этой теме и других сетях без успеха.

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

export QT_DEBUG_PLUGINS=1

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

libxcb-с xinerama.так.0: невозможно открыть разделяемый объектный файл: нет такого файл или каталог.

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

sudo apt install libxcb-xinerama

I была установлена библиотека. Так что я использовал старый трюк да --reinstall

sudo apt install --reinstall libxcb-xinerama

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

Итак, я потратил около дня, пытаясь выяснить, в чем проблема; попробовал все предлагаемые решения, но ни одно из них не работало, как установка XCB libs или экспорт папки плагинов Qt. Решение, которое предлагается использовать QT_DEBUG_PLUGINS=1 для отладки проблема не дала мне прямого представления, как в ответе - вместо этого я получал что-то о неразрешенных символах в Qt5Core.

Это дало мне подсказку: что делать, если он пытается использовать разные файлы из разных Qt установки? На моей машине у меня была стандартная версия, установленная в /home/username/Qt/ и некоторые локальные сборки в моем проекте, которые я скомпилировал сам (у меня есть другие пользовательские наборы, а также в других местах). Всякий раз, когда я пытался использовать любой из комплектов (установленный Qt maintenance tool или построенный самостоятельно), я получал "ошибку xcb".

решение было простым: обеспечить путь Qt через CMAKE_PREFIX_PATH и не Qt5_DIR как я сделал, и это решило проблему. Пример:

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

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

rm -rf ~/.config/Qt*

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

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

sudo ln-sf /usr/lib/...."приспособить ее.".../qt5 / Плагины / платформы / / usr / bin/

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