"Не удалось загрузить плагин платформы" xcb "" при запуске приложения qt5 на linux без установленного qt
Я написал приложение для linux, которое использует Qt5.
но когда я пытаюсь запустить его в linux без установленного Qt SDK, вывод в консоли:
не удалось загрузить плагин платформы "xcb". Доступные платформы:
Как я могу это исправить? Может быть мне нужно скопировать файл плагина? Когда я использую ubuntu с установленным Qt5, но переименовываю каталог Qt, возникает та же проблема. Итак, он использует некоторый файл из Qt справочник...
обновление: когда я создаю в приложении dir папку "платформы" с файлом libqxcb.так что, приложение по-прежнему не запускается, но сообщение об ошибке изменяется:
не удалось загрузить плагин платформы "xcb". Доступные платформы:
xcb
Как это может произойти? Как плагин платформы может быть доступен, но не может быть загружен?
14 ответов
используйте ldd (man ldd) для отображения зависимостей общей библиотеки. На libqxcb.так
.../platforms$ ldd libqxcb.so
показывает, что xcb зависит от libQt5DBus.Итак.5 в дополнение к libQt5Core.Итак.5 и libQt5Gui.Итак.5 (и многие другие системные библиотеки). Добавить libQt5DBus.Итак.5 к вашей коллекции общих библиотек, и вы должны быть готовы двигаться дальше.
как было опубликовано ранее, вам необходимо убедиться, что вы устанавливаете Плагины платформы при развертывании приложения. В зависимости от того, как вы хотите развернуть вещи, есть два метода, чтобы сообщить вашему приложению, где Плагины платформы (например, платформы/Плагины/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, чтобы решить эту проблему.
сначала вы должны создать где ваш двоичный, потому что это место, где 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 просто не хотел работать из-за ошибки в вопросе. Я немного google, и я нашел решение, которое решило мою проблему: с этого момента 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. Один был командной строкой ("app"), другой GUI_based ("app_GUI").
Я использовал "ldd app", чтобы узнать, какие необходимы библиотеки, и скопировал их к гостю Ubuntu. В то время как исполняемый файл командной строки " app " работал нормально, исполняемый файл на основе GUI разбился, давая ошибка "не удалось загрузить плагин платформы" xcb". Я проверил ldd для libxcb.Итак, но это тоже не пропало зависимости.
проблема заключалась в том, что, хотя я скопировал все нужные библиотеки, я случайно скопировал также библиотеки, которые уже присутствовали в гостевой системе.. это означает, что (а) им не нужно было копировать их в первую очередь и (б) хуже, копирование их привело к несовместимости между установочными библиотеками. Хуже того, как я уже сказал, они не были обнаружены 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.так.0" правильно? Однако, когда я запускаю команду:
sudo apt install libxcb-xinerama
I lib был установлен. Поэтому я использовал старый трюк да --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 !!