Я написал приложение для Linux, использующее Qt5.
Но когда я пытаюсь запустить его в Linux без установленного Qt SDK, вывод в консоли:
Не удалось загрузить плагин платформы "xcb". Доступные платформы:
Как я могу это исправить? Может мне нужно скопировать какой-нибудь файл плагина? Когда я использую ubuntu с установленным Qt5, но переименовываю каталог Qt, возникает та же проблема. Итак, он использует какой-то файл из каталога Qt ...
ОБНОВЛЕНИЕ: когда я создаю в каталоге приложения папку «платформы» с файлом libqxcb.so , приложение по-прежнему не запускается, но сообщение об ошибке изменяется:
Не удалось загрузить плагин платформы "xcb". Доступные платформы:
xcb
Как такое могло случиться? Как плагин платформы может быть доступен, но не может быть загружен?
eveonline.sh
, а неeveonline
- в программе запуска есть все библиотеки, связанные со специальными версиями.Ответы:
Используйте ldd (man ldd), чтобы показать зависимости разделяемых библиотек. Запускаем это на libqxcb.so
показывает, что xcb зависит от libQt5DBus.so.5 в дополнение к libQt5Core.so.5 и libQt5Gui.so.5 (и многим другим системным библиотекам). Добавьте libQt5DBus.so.5 в свою коллекцию общих библиотек, и вы должны быть готовы двигаться дальше.
источник
sudo apt-get install libx11-xcb1
проблема решена. Но именно ваша рекомендация по использованиюldd
указала мне на правильную библиотеку для установки. Благодарность!ldd
, попробуйте найтиplugins/platforms
каталог в вашей установке Qt. Попробуйте скопировать весь этот каталог в то же место, что и ваш двоичный файл или файл общей библиотеки. Если это работает, вы можете установитьLD_LIBRARY_PATH
(Hacky) или, как указано в ответе по @bossbarber,QT_QPA_PLATFORM_PLUGIN_PATH
.Как было опубликовано ранее, вам необходимо убедиться, что вы установили плагины платформы при развертывании приложения. В зависимости от того, как вы хотите что-то развернуть, есть два способа сообщить вашему приложению, где плагины платформы (например, платформы / плагины / libqxcb.so) находятся во время выполнения, которые могут сработать для вас.
Первый - экспортировать путь к каталогу через переменную QT_QPA_PLATFORM_PLUGIN_PATH.
или
export QT_QPA_PLATFORM_PLUGIN_PATH=path/to/plugins ./my_qt_app
Другой вариант, который я предпочитаю, - это создать файл qt.conf в том же каталоге, что и ваш исполняемый файл. Содержимое которого будет:
Более подробную информацию об этом можно найти здесь и при использовании qt.conf
источник
LD_LIBRARY_PATH
не работает, ноQT_QPA_PLATFORM_PLUGIN_PATH
сделали свое дело. Супер-спасибо.Я попытался запустить свой двоичный файл, скомпилированный с помощью Qt
5.7
, в Ubuntu 16.04 LTS, где Qt5.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
.источник
Ubuntu 16.04 64бит. У меня проблема, по-видимому, без причин. Накануне вечером я смотрел фильм на моем экземпляре VideoLan, а в ту ночь я хотел бы посмотреть еще один фильм с VideoLan. VLC просто не хотел запускаться из-за ошибки в вопросе. Я немного погуглил и нашел решение, которое решило мою проблему: с этого момента VLC работает так же, как и раньше. Решение этой команды:
sudo ln -sf /usr/lib/x86_64-linux-gnu/qt5/plugins/platforms/ /usr/bin/
Я не могу объяснить, каковы его последствия, но я знаю, что это создает некоторую недостающую символическую ссылку.
источник
-f
--force
флаг, пока вы действительно не узнаете, что делаете. Это может вызвать другие проблемы.Я пробовал основные части каждого ответа, но безрезультатно. Что окончательно исправило для меня, так это экспорт следующих переменных среды:
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/
источник
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/lib/x86_64-linux-gnu/
. К сожалению, он исправил только мой VLC, а не Virtualbox, который имеет ту же ошибку ...Начиная с версии 5, Qt использует систему абстракции платформы (QPA) для абстрагирования от базовой платформы.
Реализация для каждой платформы обеспечивается плагинами. Для X11 это плагин XCB. См. Qt для требований X11 для получения дополнительной информации о зависимостях.
источник
Наверное, это поможет. Я использую Ubuntu 18.04, и когда я установил Krita, используя метод ppa. У меня такая ошибка:
Я безуспешно пробовал все решения, которые нашел в этой теме и на других веб-сайтах.
Наконец, я нашел сообщение, в котором автор упоминает, что можно активировать отладку, указанную в qt5, с помощью этой простой команды:
export QT_DEBUG_PLUGINS=1
После добавления этой команды я снова запускаю krita, у меня такая же ошибка, как и теперь, когда я знаю причину.
Эта ошибка мешает "xcb" правильно загрузиться. Значит, решением будет установка libxcb-xinerama.so.0, верно? Однако когда я запускаю команду:
Я установил библиотеку. Так что я использовал старый трюк, да
--reinstall
Эта последняя команда решила мою проблему.
источник
У этой проблемы может быть много причин. Ключ в том, чтобы использовать
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 .
источник
Я столкнулся с очень похожей проблемой с тем же сообщением об ошибке. Во-первых, отлаживайте некоторые, включив принтер Qt Debug с помощью команды командной строки:
и повторно запустите приложение. Для меня это показало следующее:
«Невозможно загрузить библиотеку /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. (Для меня команда "арка" дала другой и бесполезный результат)
Затем я поискал в Google "libxkbcommon-x11.so.0 ubuntu 18.04 amd64" и аналогично для libxkbcommon-x11.so.0, что дает эти пакеты на packages.ubuntu.com. Это подсказало мне, оглядываясь назад, и неудивительно, что мне не хватает пакетов, называемых libxkbcommon-x11-0 и libxkbcommon0, и что установка этих пакетов будет включать необходимые файлы, а версии для разработчиков - нет. Тогда решение:
источник
Я столкнулся с такой же проблемой при установке 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
источник
Итак, я потратил около дня, пытаясь выяснить, в чем проблема; попробовал все предложенные решения, но ни один из них не работал, как установка 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
источник
В моем случае мне нужно было развернуть два приложения Qt на гостевой виртуальной машине Ubuntu. Один был командной строкой («приложение»), другой - с графическим интерфейсом («app_GUI»).
Я использовал «ldd app», чтобы узнать, какие библиотеки необходимы, и скопировал их в гостевую систему Ubuntu. В то время как исполняемый файл "app" командной строки работал нормально, исполняемый файл с графическим интерфейсом вылетал из строя, давая ошибку "Не удалось загрузить плагин платформы" xcb ". Я проверил ldd на наличие libxcb.so, но и у него не было отсутствующих зависимостей.
Проблема заключалась в том, что, хотя я скопировал все нужные библиотеки, я случайно скопировал также библиотеки, которые уже присутствовали в гостевой системе .. это означает, что (а) в них не было необходимости копировать их в первую очередь и (б) хуже , их копирование привело к несовместимости между установочными библиотеками. Что еще хуже, они не были обнаружены ЛДД, как я уже сказал ...
Решение? Убедитесь, что вы копируете библиотеки, показанные ldd как отсутствующие, и абсолютно никаких дополнительных библиотек .
источник
В моем случае отсутствующие файлы заголовков были причиной создания
libxcb
не Qt. Их установка согласно https://wiki.qt.io/Building_Qt_5_from_Git#Linux.2FX11 решила проблему:источник
Мне нравится решение с
qt.conf
.Поместите
qt.conf
рядом с исполняемым файлом со следующими строками:И работает как шарм: ^)
Для рабочего примера:
[Paths] Prefix = /home/user/SDKS/Qt/5.6.2/5.6/gcc_64/
Документация по этому поводу здесь: https://doc.qt.io/qt-5/qt-conf.html.
источник
cd path/to/executable; vim qt.conf
, вставить. Сохранить и выйти.Я связываю все материалы Qt статически с общими сборками Linux моих проектов с открытым исходным кодом. Это немного облегчает жизнь. Вам просто нужно сначала создать статические версии библиотек Qt. Конечно, это не может быть применено к программному обеспечению с закрытым исходным кодом из-за проблем с лицензированием. Развертывание приложений Qt5 в Linux в настоящее время немного проблематично, потому что, например, Ubuntu 12.04 не имеет библиотек Qt5 в репозиториях пакетов.
источник
У меня была эта проблема, и я догадывался, что удалил конфигурации Qt из своей среды. Т.е.,
Затем я запустил qtcreator, и он перенастроил себя в соответствии с существующим состоянием машины. Он больше не запоминал, где находились мои проекты, но это просто означало, что мне нужно было снова перейти к ним «впервые».
Но что еще более важно, он построил согласованный набор путей к библиотекам, так что я мог заново собрать и запустить исполняемые файлы проекта без пропадания библиотек xcb или qxcb.
источник
sudo ln -sf /usr/lib/...."adapt-it"..../qt5/plugins/platforms/ / usr / bin /
Он создает символическую ссылку, которую пропустил. Хорошо для QT! Хорошо для VLC !!
источник