Я написал приложение для Linux, которое использует Qt5.
Но когда я пытаюсь запустить его на linux без установленного Qt SDK, вывод на консоль выглядит так:
Failed to load platform plugin "xcb". Available platforms are:
Как я могу это исправить? Может быть, мне нужно скопировать файл плагина? Когда я использую Ubuntu с установленным Qt5, но переименовываю каталог Qt, возникает та же проблема. Итак, он использует какой-то файл из каталога qt ...
Я нашел файл libqxcb.so
в каталоге Qt SDK, но размещение его в /usr/lib
не помогает.
У меня было это сообщение об ошибке при попытке запустить «Stellarium».
С помощью strace я обнаружил, что отсутствующим файлом был libxcb-xinerama.so.0
. Мне пришлось переустановить libxcb-xinerama0
, чтобы заставить его работать:
sudo apt-get install --reinstall libxcb-xinerama0
Правильное решение заключается в запуске следующей команды в терминале:
sudo ln -sf /usr/lib/x86_64-linux-gnu/qt5/plugins/platforms/ /usr/bin/
Он создает символическую ссылку, которую пропустил.
Запустите ldd в вашем исполняемом приложении, чтобы увидеть, как оно разрешает библиотечные зависимости.
Также это необходимо прочитать, чтобы понять, какие основные библиотеки необходимы в простом случае применения графического интерфейса пользователя:
Попробуйте установить пакет libqt5x11extras5
с помощью команды:
sudo apt-get install libqt5x11extras5
Имя может отличаться. Вы можете выяснить это с помощью поиска:
sudo apt-cache search qt5 | grep 'X11 extras'
и в результате вы получите имя пакета:
libqt5x11extras5 - Дополнения Qt 5 X11
blockquote>
Для тех, кто все еще застрял после того, как попробовал любой другой вариант в Интернете, вы можете найти точный путь, по которому этот пресловутый 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
.
Ура.
Для всех будущих читателей, которые сталкиваются с этим - прежде чем вы начнете (опасно) возиться с символическими ссылками на общие библиотеки, я настоятельно рекомендую вам запустить
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]
Выполнение этого решило это для меня:
sudo apt-get --reinstall install libqt5dbus5 \
libqt5widgets5 libqt5network5 libqt5gui5 libqt5core5a \
libdouble-conversion1 libxcb-xinerama0
Это как решить несколько проблем, когда я запускаю эмулятор на 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
Кажется, что за этим могут отсутствовать различные вещи. В моем случае (Debian 9.7), QT_DEBUG_PLUGINS = 1 помогло проследить недостающие библиотеки, и
$ Sudo APT-получить установку libxcb-рендер-util0 libxcb-image0 libxcb-keysyms1 libxcb-icccm4
решил проблему.
Скопируйте plugins/platforms/libqxcb.so
из вашей qt
установки в platforms/libqxcb.so
в каталоге приложения.
В моем Ubuntu типа:
sudo ln -sf /usr/lib/x86_64-linux-gnu/qt5/plugins/platforms/ /usr/bin/platforms
Может работать
Создайте файл qt.conf в Вашем проекте и добавьте:
[Paths]
Plugins = /path/to/our/qt instalation/plugins
Платформа: 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, которые, возможно, нужно исправить, но на данный момент этого было достаточно, чтобы решить проблему.
Другие ответы здесь очень полезны, но есть еще одна потенциальная причина такого поведения, с которым я столкнулся, и для которого требуется совершенно другое решение.
Я запускал Ubuntu 18.04 на VirtualBox 6.1.4, и после установки некоторых проприетарных приложений, которые используются в моей работе, все приложения Qt5 не запускались. Как и все здесь, они распечатали сообщение об ошибке, касающееся невозможности загрузить «xcb». Поковырявшись некоторое время, я понял, что "/ usr / lib" больше не индексируется ldconfig. Я удивлен, что это сломало так же мало приложений, вероятно, из-за того, что "/ usr / lib / x86_64-linux-gnu" все еще индексировался.
Если у вас возникла такая же проблема, исправить ее несложно. Просто добавьте «/ usr / lib /» в LD_LIBRARY_PATH, используя любой из этих методов
Я столкнулся с похожей проблемой, но с другим приложением 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
.
Наконец-то проблема решена!
прочитайте внимательно, на случай: Ошибка 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/