【问题标题】:Only eglfs when cross-compiling QT static for Raspberry PI仅在为 Raspberry PI 交叉编译 QT 静态时使用 eglfs
【发布时间】:2018-08-13 00:32:13
【问题描述】:

我已经使用 Raspberry PI 交叉编译了 QT static

./configure -opengl es2 -opensource -confirm-license -release -static \
            -prefix /usr/local/qt5static -hostprefix ~/raspi/qt5 -extprefix ~/raspi/qt5static \
            -device linux-rasp-pi-novc-g++ \
            -device-option CROSS_COMPILE=arm-raspbian-linux-gnueabihf- \
            -optimized-qmake -reduce-exports \
            -sysroot ~/raspi/sysroot \
            -make libs -make tools -no-use-gold-linker -v

“novc”设备与 linux-rasp-pi-g++ 基本相同,但没有来自 /opt/vc 的包含或库。当我运行该程序时,它以全屏方式启动(因为 eglfs),当使用 export QT_DEBUG_PLUGINS=1 探测时产生*

QFactoryLoader::QFactoryLoader() 忽略 “org.qt-project.Qt.QPA.QPlatformIntegrationFactoryInterface.5.3”自 插件在静态构建中被禁用 qt.qpa.plugin: 找不到 Qt平台插件“android”在“”这个应用程序失败 start 因为没有 Qt 平台插件可以被初始化。重新安装 该应用程序可能会解决此问题。

可用的平台插件有:eglfs、eglfs。

factory loader失败还好,但是为什么只有eglfs,哪里有两个呢?如何确保 xcb 是一个选项并且它是默认选项?

*我使用myapp -platform android,因为我知道Android 不在其中。来自sudo apt install qt 的动态链接QT 显示

可用的平台插件有:eglfs、linuxfb、minimal、minimalegl、 离屏,xcb。

我想从我的静态编译中获得它。这是我的 QPA 后端(我确实看到了 X11 的 eglfs,也许这就是我必须触发的......)

QPA backends:
  DirectFB ............................... no
  EGLFS .................................. yes
  EGLFS details:
    EGLFS OpenWFD ........................ no
    EGLFS i.Mx6 .......................... no
    EGLFS i.Mx6 Wayland .................. no
    EGLFS RCAR ........................... no
    EGLFS EGLDevice ...................... yes
    EGLFS GBM ............................ no
    EGLFS VSP2 ........................... no
    EGLFS Mali ........................... no
    EGLFS Raspberry Pi ................... no
    EGL on X11 ........................... yes
  LinuxFB ................................ yes
  VNC .................................... yes
  Mir client ............................. no
  X11:
    Using system-provided XCB libraries .. no
    EGL on X11 ........................... yes
    Xinput2 .............................. no
    XCB XKB .............................. yes
    XLib ................................. yes
    XCB render ........................... yes
    XCB GLX .............................. yes
    XCB Xlib ............................. yes
    Using system-provided xkbcommon ...... no
    Native painting (experimental) ....... no

我的 hello_plugin_import 有这个:

// This file is autogenerated by qmake. It imports static plugin classes for
// static plugins specified using QTPLUGIN and QT_PLUGIN_CLASS.<plugin> variables.
#include <QtPlugin>
Q_IMPORT_PLUGIN(QEglFSIntegrationPlugin)
Q_IMPORT_PLUGIN(QXcbEglIntegrationPlugin)
Q_IMPORT_PLUGIN(QXcbGlxIntegrationPlugin)
Q_IMPORT_PLUGIN(QGifPlugin)
Q_IMPORT_PLUGIN(QICNSPlugin)
Q_IMPORT_PLUGIN(QICOPlugin)
Q_IMPORT_PLUGIN(QJpegPlugin)
Q_IMPORT_PLUGIN(QTgaPlugin)
Q_IMPORT_PLUGIN(QTiffPlugin)
Q_IMPORT_PLUGIN(QWbmpPlugin)
Q_IMPORT_PLUGIN(QWebpPlugin)
Q_IMPORT_PLUGIN(QEglFSEmulatorIntegrationPlugin)
Q_IMPORT_PLUGIN(QEglFSKmsEglDeviceIntegrationPlugin)
Q_IMPORT_PLUGIN(QEglFSX11IntegrationPlugin)
Q_IMPORT_PLUGIN(QConnmanEnginePlugin)
Q_IMPORT_PLUGIN(QGenericEnginePlugin)
Q_IMPORT_PLUGIN(QNetworkManagerEnginePlugin)

更新。我注意到我可以将一堆 libxcb 包安装到我的 sysroot 中。我想如果我这样做,我可以让 xcb 显示为平台选项(甚至是默认平台选项??)。但这会扰乱我的静态编译吗?我的客户是否还需要安装所有这些库,或者 qmake 会做正确的事情吗?

libglu1-mesa-dev is already the newest version (9.0.0-2.1).
libx11-xcb-dev is already the newest version (2:1.6.4-3).
libxcb-dri2-0-dev is already the newest version (1.12-1).
libxcb-dri2-0-dev set to manually installed.
libxcb-dri3-dev is already the newest version (1.12-1).
libxcb-dri3-dev set to manually installed.
libxcb-glx0-dev is already the newest version (1.12-1).
libxcb-present-dev is already the newest version (1.12-1).
libxcb-present-dev set to manually installed.
libxcb-randr0-dev is already the newest version (1.12-1).
libxcb-randr0-dev set to manually installed.
libxcb-render0-dev is already the newest version (1.12-1).
libxcb-render0-dev set to manually installed.
libxcb-shape0-dev is already the newest version (1.12-1).
libxcb-shape0-dev set to manually installed.
libxcb-sync-dev is already the newest version (1.12-1).
libxcb-sync-dev set to manually installed.
libxcb-xfixes0-dev is already the newest version (1.12-1).
libxcb-xfixes0-dev set to manually installed.
libxcb1-dev is already the newest version (1.12-1).
libxi-dev is already the newest version (2:1.7.9-1).
libxrender-dev is already the newest version (1:0.9.10-1).
The following additional packages will be installed:
  libxcb-composite0 libxcb-cursor0 libxcb-damage0 libxcb-dpms0 libxcb-ewmh2 libxcb-record0 libxcb-res0 libxcb-screensaver0 libxcb-xf86dri0 libxcb-xrm0 libxcb-xtest0
  libxcb-xv0 libxcb-xvmc0
The following NEW packages will be installed:
  libxcb-composite0 libxcb-composite0-dev libxcb-cursor-dev libxcb-cursor0 libxcb-damage0 libxcb-damage0-dev libxcb-dpms0 libxcb-dpms0-dev libxcb-ewmh-dev libxcb-ewmh2
  libxcb-icccm4-dev libxcb-image0-dev libxcb-keysyms1-dev libxcb-record0 libxcb-record0-dev libxcb-render-util0-dev libxcb-res0 libxcb-res0-dev libxcb-screensaver0
  libxcb-screensaver0-dev libxcb-shm0-dev libxcb-util0-dev libxcb-xf86dri0 libxcb-xf86dri0-dev libxcb-xinerama0-dev libxcb-xkb-dev libxcb-xrm-dev libxcb-xrm0 libxcb-xtest0
  libxcb-xtest0-dev libxcb-xv0 libxcb-xv0-dev libxcb-xvmc0 libxcb-xvmc0-dev

【问题讨论】:

    标签: c++ qt raspberry-pi


    【解决方案1】:

    我相信,当您使用-static 配置 Qt 时,您会将平台插件烘焙到构建中,并且以后您将无法在插件之间进行交换。我不确定这一点,但我一直在走这条路,无法让 qpa 切换工作,只列出了一个平台插件。如果有 方法,我很想知道它!

    如果我在这方面是正确的,那么要使用 xcb 而不是 eglfs,您需要使用 configure 的第一行重新配置 Qt,例如:

    ./configure -no-eglfs -qpa xcb -qt-xcb -opensource -confirm-license -release -static \
    

    祝你好运

    【讨论】:

    • 原来诀窍是你必须在 qmake .pro 文件中为 xcb 添加 QTPLUGIN。
    • qmake .pro 文件最终是什么样子的?
    • QTPLUGIN += qxcb
    猜你喜欢
    • 2017-03-30
    • 1970-01-01
    • 2016-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-28
    • 2021-12-17
    • 2020-11-16
    相关资源
    最近更新 更多