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


22

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

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

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

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

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

Ответы:


12

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

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

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


1
Это решило проблему для меня.
Пратик

3
Почему вы связываете файлы plugins/platformsс /usr/bin? platformsКаталог содержит общие библиотеки, /usr/binиспользуются для бинарных файлов. Не должно ли содержание platformsвойти в /usr/lib?
Натан Ф.

@NathanF. по крайней мере, для моей установки загрузчик Qt ищет платформы в /usr/bin/platforms(я не знаю почему). Так что этот ответ также работал для меня: stackoverflow.com/a/25437758/2249798
m13r

12

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

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))ошибку и нашел решение , которое решило проблему.


2
Не уверен, кто за тебя проголосовал. Это дало мне следы, необходимые для поиска фактической ошибки, относящейся к моей конкретной ситуации (в моем случае libc ++. Поэтому отсутствовал и должен был быть установлен из libc ++ - dev ". Спасибо за сообщение об этом.
HBSKan

11

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

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

sudo apt-get install --reinstall libxcb-xinerama0

Ух ты, что за охота на это пробовала разные переустановки. Так благодарен за это.
Хенди

Это помогло !!! спасибо
trsvchn

6

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

Название может быть другим. Вы можете понять это с помощью поиска:
sudo apt-cache search qt5 | grep 'X11 extras'

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

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


3

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

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

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


2

В моем Ubuntu типа:

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

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


1
Это не очень хороший ответ. Пожалуйста, измените, чтобы объяснить, что именно делает эта команда.
YouAGitForNotUsingGit

Не сработало для меня
Ратберт

2

Для тех, кто все еще застрял после того, как попробовал любой другой вариант в Интернете, вы можете найти точный путь, по которому этот пресловутый libqxcb.so поиск ищется, для открытия / загрузки Qtприложением ( VirtualBox-5.2.8это Qtприложение в моем случае), используя Трассирование инструмент. В моем случае, так как я строил 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«s 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++/LLVMon Ubuntu 17.10 x86_64for target Linux/AMD64( Ubuntu 17.10 x86_64) и успешно запускать его после решения других проблем наряду с этим пресловутым libqxcb.so.

Приветствия.


1

Вот как можно решить несколько проблем, когда я запускаю эмулятор на 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

1

Запуск этого решил это для меня:

sudo apt-get --reinstall install libqt5dbus5 \
libqt5widgets5 libqt5network5 libqt5gui5 libqt5core5a \
libdouble-conversion1 libxcb-xinerama0

0

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

$ sudo apt-get install libxcb-render-util0 libxcb-image0 libxcb-keysyms1 libxcb-icccm4

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



-3

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.