LINUX.ORG.RU

xcb - это странный предмет! То ли он есть, то ль его нет??

 , , ,


1

2

Желаю здравия всем почтеннейшим собеседникам )) Излагаю по порядку:

Поставил Дебиан 9.2.1 (стретч) на виртуальную x86_64. Навалил пакетов:

sudo apt-get install perl python gcc build-essential cmake
sudo apt-get install gstreamer0.10-qapt gstreamer1.0-alsa gstreamer1.0-plugins-bad gstreamer1.0-plugins-base gstreamer1.0-plugins-base-dbg gstreamer1.0-plugins-good gstreamer1.0-plugins-good-dbg gstreamer1.0-plugins-ugly gstreamer1.0-x libgstreamer1.0-0 libgstreamer1.0-0-dbg libgstreamer-plugins-base1.0-0 parole parole-dev libclutter-gst-3.0-0 libclutter-gst-3.0-dev libclutter-gst-3.0-doc gir1.2-coglgst-2.0 libcogl-gst20 fso-deviced-player-gstreamer gstreamer1.0-fluendo-mp3 phonon-backend-gstreamer phonon-backend-gstreamer-common phonon4qt5-backend-gstreamer playitslowly gstreamer1.0-pocketsphinx libqt5glib-2.0-0 libqt5gstreamer-1.0-0 libqt5gstreamer-dev libqt5gstreamerquick-1.0-0 libqt5gstreamerui-1.0-0 libqt5gstreamerutils-1.0-0 libqtglib-2.0-0 libqtgstreamer-1.0-0 libqtgstreamer-dev libqtgstreamerui-1.0-0 libqtgstreamerutils-1.0-0 qml-module-qtgstreamer qt5gstreamer-dbg qtgstreamer-dbg qtgstreamer-declarative qtgstreamer-doc qtgstreamer-plugins qtgstreamer-plugins-qt5 libqgsttools-p1 libqt5multimedia5-plugins
sudo apt-get install libXrender libxcb-render libxcb-render-util libxcb-shape libxcb-randr libxcb-xfixes libxcb-sync libxcb-shm libxcb-icccm libxcb-keysyms libxcb-image libfontconfig libfreetype libXi libXext libX11 libxcb libX11-xcb libSM libICE libglib-2.0 libpthread libfontconfig1-dev libfreetype6-dev libx11-dev libxext-dev libxfixes-dev libxi-dev libxrender-dev libxcb1-dev libx11-xcb-dev libxcb-glx0-dev libxcb-keysyms1-dev libxcb-image0-dev libxcb-shm0-dev libxcb-icccm4-dev libxcb-sync0-dev libxcb-xfixes0-dev libxcb-shape0-dev libxcb-randr0-dev libxcb-render-util0-dev

Поверх всего этого, не моргнув глазом, из бинарного пакета с download.qt.io, встала и заработала Qt5.9.3 вместе с креатором (и это после того, как я убил 2 недели на попытки собрать!!!). При помощи сего могучего и симпатичного инструмента я написал и отладил программу, которая прекрасно работает при запуске из IDE и даже иногда без оной. Должен заметить, что в целом (но не на все 100%) библиотека и IDE мне понравились, знакомство было приятным. Моя программа использует модули Core, Multimedia, Network, Gui, Widgets. Сейчас настало время отрывать яблочко от яблони: конечная цель - портировать это дело на «малину» и там уже рисовать бэкенд, но эти пляски ещё впереди. Сейчас я пока что пытаюсь запустить приложение на той же платформе, но в отсутствии установленной Qt. Пробил зависимости с помощью ldd (8 Qt-шных so-файлов, остальное всё - из предустановленных пакетов). Сделал папочку, в неё положил: 1) сам бинарь, 2) папку lib c so-файлами, 3) папку plugins с аудио-плагинами для моей проги, 4) папку platforms, которая была в плагинах, но я вычитал и убедился, что её надо в корень вместе с бинарём, и наконец - 4) скрипт, прописывающий LD_LIBRARY_PATH и QT_QPA_PLATFORM_PLUGIN_PATH перед запуском проги. Скрипт:

#!/bin/bash
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$PWD/lib/
export LD_LIBRARY_PATH
QT_QPA_PLATFORM_PLUGIN_PATH=$QT_QPA_PLATFORM_PLUGIN_PATH:$PWD/plugins/
export QT_QPA_PLATFORM_PLUGIN_PATH
./Control_Panel
Все зависимости вроде бы удовлетворены, запуск делаю на снимке той же машины, на которую потом ставил Qt и отлаживал прогу. Однако при запуске скрипта:
madkid@Virtual-Rockit:~/Рабочий стол/Control_Panel/Pack$ ./run.sh
This application failed to start because it could not find or load the Qt platform plugin "xcb"
in ":/home/madkid/Рабочий стол/Control_Panel/Pack/plugins/".

Available platform plugins are: eglfs, linuxfb, minimal, minimalegl, offscreen, vnc, xcb.

Reinstalling the application may fix this problem.
./run.sh: строка 9: 16933 Аварийный останов         ./Control_Panel
madkid@Virtual-Rockit:~/Рабочий стол/Control_Panel/Pack$
То есть плагин вроде бы есть, но его нет. Как это понимать??

QT_QPA_PLATFORM_PLUGIN_PATH=$QT_QPA_PLATFORM_PLUGIN_PATH:$PWD/plugins/

У тебя $QT_QPA_PLATFORM_PLUGIN_PATH исходно пустой, и получается один путь с двоеточием в начале. Убери подстановку и двоеточие, или заверни в if.

intelfx ★★★★★ ()
Последнее исправление: intelfx (всего исправлений: 1)

можно создать qt.conf рядом с бинарём и там указать путь плагинов, см. как это делается креаторе
и кроме как LD_LIBRARY_PATH=./lib ./myapp - более ничего и ненада
изучи содержимое qtcreator.sh

x905 ★★★★★ ()

запустить приложение на той же платформе, но в отсутствии установленной Qt

А не хочешь ли ты просто статически собрать нужное подмножество Qt строго под твою прогу? Я такое делал, но только под винду - в линуксе хорошим тоном считается использовать Qt из репозиториев. Но если задача стоит именно отвязаться от пакетов с Qt, то почему бы и нет? В линуксе это даже по идее должно быть проще, чем в моей заметке про винду - не надо трахаться с абсолютными путями.

Если в твоём проекте подразумевается один бинарь, то статическая сборка будет даже компактнее, что для той же малины - плюс.

hobbit ★★★★★ ()
Последнее исправление: hobbit (всего исправлений: 2)