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

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

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

Failed to load platform plugin "xcb". Available platforms are:

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

Я нашел файл libqxcb.so в каталоге Qt SDK, но размещение его в /usr/lib не помогает.

20
задан 8 December 2016 в 11:59

16 ответов

У меня было это сообщение об ошибке при попытке запустить «Stellarium».

С помощью strace я обнаружил, что отсутствующим файлом был libxcb-xinerama.so.0. Мне пришлось переустановить libxcb-xinerama0, чтобы заставить его работать:

sudo apt-get install --reinstall libxcb-xinerama0
0
ответ дан 8 December 2016 в 11:59

Правильное решение заключается в запуске следующей команды в терминале:

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

Он создает символическую ссылку, которую пропустил.

0
ответ дан 8 December 2016 в 11:59

Запустите ldd в вашем исполняемом приложении, чтобы увидеть, как оно разрешает библиотечные зависимости.

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

http://qt-project.org/doc/qt-5/linux- deployment.html

0
ответ дан 8 December 2016 в 11:59

Попробуйте установить пакет libqt5x11extras5 с помощью команды:
sudo apt-get install libqt5x11extras5

Имя может отличаться. Вы можете выяснить это с помощью поиска:
sudo apt-cache search qt5 | grep 'X11 extras'

и в результате вы получите имя пакета:

libqt5x11extras5 - Дополнения Qt 5 X11

0
ответ дан 8 December 2016 в 11:59

Для тех, кто все еще застрял после того, как попробовал любой другой вариант в Интернете, вы можете найти точный путь, по которому этот пресловутый libqxcb.so разыскивается, для открытия / загрузки с помощью Приложение Qt (в моем случае VirtualBox-5.2.8 - это приложение Qt), использующее инструмент strace . В моем случае, поскольку я строил VirtualBox-5.2.8 из его источника, он искал libqxcb.so в расположении ниже:
"...VirtualBox-5.2.8/out/linux.amd64/release/bin/platforms/", а не в путях к библиотекам default, установка Qt путь и т. д. Итак, ни одна из ldd проверок и других решений не сработала. А также установка QT_DEBUG_PLUGINS=1 также не создала никаких дополнительных журналов.

Запуск strace в двоичном файле VirtualBox, который я собрал с помощью Clang / LLVM в Ubuntu 17.10 x86_64:

...VirtualBox-5.2.8$ strace ./out/linux.amd64/release/bin/VirtualBox

.
.
.
access(".../VirtualBox-5.2.8/out/linux.amd64/release/bin/platforms/.", F_OK) = -1 ENOENT (No such file or directory)
write(2, "Qt FATAL: ", 10Qt FATAL: )              = 10
write(2, "This application failed to start"..., 154This application failed to start because it could not find or load the Qt platform plugin "xcb"
in "".

Reinstalling the application may fix this problem.) = 154
.
.
.

Это был мой hitting-the-nail-on-its-head момент, и я создал symlink из установленного каталога Qt5.10.1 platforms, упомянутого ниже: "...Qt5.10.1/Tools/QtCreator/lib/Qt/plugins/platforms/", по пути поиска, который является "...VirtualBox-5.2.8/out/linux.amd64/release/bin/". Таким образом, VirtualBox-5.2.8, собранный из исходного кода в Linux (Ubuntu 17.10 x86_64) с использованием Clang/LLVM, наконец, успешно запущен !

На самом деле, еще одна интересная вещь заключается в том, что я собрал VirtualBox-5.2.8 полностью, используя Clang/Clang++/LLVM на Ubuntu 17.10 x86_64 после значительных усилий - для FreeBSD уже есть порт для сборки VirtualBox с использованием clang, но для Linux он сильно зависит от GCC, как я видел, и поэтому потребовалось много усилий, чтобы достичь этой точки, чтобы иметь возможность успешно собрать VirtualBox-5.2.8 из его источника, используя Clang/Clang++/LLVM на Ubuntu 17.10 x86_64 для цель Linux/AMD64 (Ubuntu 17.10 x86_64) и успешно запустить ее после решения других проблем наряду с этой пресловутой libqxcb.so.

Ура.

0
ответ дан 8 December 2016 в 11:59

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

export QT_DEBUG_PLUGINS=1

и затем запустить ваш сбой исполняемый файл снова в терминале. Прочитайте фактическое сообщение об ошибке, выдаваемое QT, так как ни одно из приведенных выше решений не устранило причину этой ошибки в моем случае.

Мой вывод после включения QT_DEBUG_PLUGINS был:

QFactoryLoader::QFactoryLoader() checking directory path "/opt/PostgreSQL/9.6/pgAdmin 4/bin/platforms" ...
loaded library "/opt/PostgreSQL/9.6/pgAdmin 4/plugins/platforms/libqxcb.so"
QLibraryPrivate::loadPlugin failed on "/opt/PostgreSQL/9.6/pgAdmin 4/plugins/platforms/libqxcb.so" : "Cannot load library /opt/PostgreSQL/9.6/pgAdmin 4/plugins/platforms/libqxcb.so: (/opt/PostgreSQL/9.6/lib/libz.so.1: version `ZLIB_1.2.9' not found (required by /usr/lib/x86_64-linux-gnu/libpng16.so.16))"
This application failed to start because it could not find or load the Qt platform plugin "xcb".

Available platform plugins are: xcb.

Reinstalling the application may fix this problem.
Aborted (core dumped)

, поэтому я затем погуглил ошибку version `ZLIB_1.2.9' not found (required by /usr/lib/x86_64-linux-gnu/libpng16.so.16)) и нашел решение для этой , которое решило проблему. [ 119]

0
ответ дан 8 December 2016 в 11:59

Выполнение этого решило это для меня:

sudo apt-get --reinstall install libqt5dbus5 \
libqt5widgets5 libqt5network5 libqt5gui5 libqt5core5a \
libdouble-conversion1 libxcb-xinerama0
0
ответ дан 8 December 2016 в 11:59

Это как решить несколько проблем, когда я запускаю эмулятор на Ubuntu 18.04.

$ vim ~/.bashrc

Добавьте следующие строки в конец файла. Я устанавливаю свой Android SDK в /opt/Android/Sdk

export ANDROID_HOME=/opt/Android/Sdk
export ANDROID_SDK_ROOT=/opt/Android/Sdk
export ANDROID_AVD_HOME=/home/<your name>/.android/avd
export LD_LIBRARY_PATH="/opt/Android/Sdk/emulator/lib64:$LD_LIBRARY_PATH"
export QT_QPA_PLATFORM_PLUGIN_PATH=/usr/lib/x86_64-linux-gnu/qt5/plugins
0
ответ дан 8 December 2016 в 11:59

Кажется, что за этим могут отсутствовать различные вещи. В моем случае (Debian 9.7), QT_DEBUG_PLUGINS = 1 помогло проследить недостающие библиотеки, и

$ Sudo APT-получить установку libxcb-рендер-util0 libxcb-image0 libxcb-keysyms1 libxcb-icccm4

решил проблему.

0
ответ дан 8 December 2016 в 11:59

Скопируйте plugins/platforms/libqxcb.so из вашей qt установки в platforms/libqxcb.so в каталоге приложения.

0
ответ дан 8 December 2016 в 11:59

В моем Ubuntu типа:

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

Может работать

0
ответ дан 8 December 2016 в 11:59

Создайте файл qt.conf в Вашем проекте и добавьте:

[Paths]
Plugins = /path/to/our/qt instalation/plugins

https://doc.qt.io/qt-5/qt-conf.html

0
ответ дан 23 November 2019 в 01:48

Платформа: Kubuntu 18.

В моем случае я сделал strace -f -s 1000 zoom -o zoom.trace , затем изучил zoom.trace. Выхода было много. Я искал SIGABRT, чтобы сузить круг вопросов. Проблема заключалась в том, что когда Zoom запускал / usr / bin / kde-open5, этот процесс выполнял внутреннее утверждение сразу после попытки stat / usr / bin / platform . По прихоти я сделал это:

 sudo ln -s /opt/zoom/platforms /usr/bin/platforms

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

1
ответ дан 29 March 2020 в 19:24

Другие ответы здесь очень полезны, но есть еще одна потенциальная причина такого поведения, с которым я столкнулся, и для которого требуется совершенно другое решение.

Я запускал Ubuntu 18.04 на VirtualBox 6.1.4, и после установки некоторых проприетарных приложений, которые используются в моей работе, все приложения Qt5 не запускались. Как и все здесь, они распечатали сообщение об ошибке, касающееся невозможности загрузить «xcb». Поковырявшись некоторое время, я понял, что "/ usr / lib" больше не индексируется ldconfig. Я удивлен, что это сломало так же мало приложений, вероятно, из-за того, что "/ usr / lib / x86_64-linux-gnu" все еще индексировался.

Если у вас возникла такая же проблема, исправить ее несложно. Просто добавьте «/ usr / lib /» в LD_LIBRARY_PATH, используя любой из этих методов

0
ответ дан 7 April 2020 в 03:28

Я столкнулся с похожей проблемой, но с другим приложением vkreplay в составе Vulkan.

Вы можете попробовать использовать strace, чтобы увидеть, что происходит за кулисами (отследить системные вызовы и сигналы) при попытке загрузки общей библиотеки, как показано ниже.

strace vkreplay -o vkcube_trace.vktrace -l 2

или

strace

в моем случае я увидел следующее выгруженное сообщение

...
stat("/usr/lib/x86_64", 0x7ffc5f1c2aa0) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/lib/x86_64/libxcb-ewmh.so.2", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
stat("/usr/lib/x86_64", 0x7ffc5f1c2aa0) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/lib/libxcb-ewmh.so.2", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
stat("/usr/lib", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
munmap(0x7fac93723000, 114202)          = 0
munmap(0x7fac92f9d000, 2109784)         = 0
munmap(0x7fac92f8b000, 69736)           = 0
...

Рассматриваемая общая библиотека — libxcb-ewmh.so.2, которую не удалось загрузить. Затем я выполняю apt search libxcb-ewmh, в моем дистрибутиве Ubuntu 19.10 я обнаружил, что это libxcb-ewmh2. Затем вы устанавливаете его с помощью sudo apt install libxcb-ewmh2.

Наконец-то проблема решена!

0
ответ дан 9 April 2020 в 17:23

прочитайте внимательно, на случай: Ошибка QLibraryPrivate::loadPlugin на "/foo../venv/lib/python3.8/site-packages/PySide2/Qt/plugins/platforms/libqxcb.so": " Не удается загрузить библиотеку /foo../venv/lib/python3.8/site-packages/PySide2/Qt/plugins/platforms/libqxcb.so: (libxcb-util.so.1: невозможно открыть общий объектный файл: такого файла нет или каталог)"

поэтому он пропускает: https://packages.debian.org/sid/libxcb-util1

для debian not sid/bullseye бэкпортирует его в вашу версию, например, stretch/buster, см. https://backports.debian.org/Instructions/

0
ответ дан 26 December 2020 в 22:10

Другие вопросы по тегам:

Похожие вопросы: