简体   繁体   English

仅在为 Raspberry PI 交叉编译 QT 静态时出现 eglfs

[英]Only eglfs when cross-compiling QT static for Raspberry PI

I have cross-compiled QT static for Raspberry PI using我已经使用交叉编译了 Raspberry PI 的 QT 静态

./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

where the 'novc' device is essentially the same as linux-rasp-pi-g++ but with no includes or libs from /opt/vc.其中“novc”设备本质上与 linux-rasp-pi-g++ 相同,但没有来自 /opt/vc 的包含或库。 When I run the program, it starts in full screen (because of eglfs), and when probed with export QT_DEBUG_PLUGINS=1 yields*当我运行程序时,它以全屏模式启动(因为 eglfs),并且当使用export QT_DEBUG_PLUGINS=1探测时产生*

QFactoryLoader::QFactoryLoader() ignoring "org.qt-project.Qt.QPA.QPlatformIntegrationFactoryInterface.5.3" since plugins are disabled in static builds qt.qpa.plugin: Could not find the Qt platform plugin "android" in "" This application failed to start because no Qt platform plugin could be initialized. QFactoryLoader::QFactoryLoader() 忽略“org.qt-project.Qt.QPA.QPlatformIntegrationFactoryInterface.5.3”,因为插件在静态构建中被禁用 qt.qpa.plugin:在“”这个应用程序中找不到 Qt 平台插件“android”无法启动,因为无法初始化 Qt 平台插件。 Reinstalling the application may fix this problem.重新安装应用程序可能会解决此问题。

Available platform plugins are: eglfs, eglfs.可用的平台插件有:eglfs、eglfs。

It is fine that the factory loader fails, but why is there only eglfs, and where are there two of them? factory loader 失败是好的,但是为什么只有eglfs,哪里有两个? How can I make sure xcb is an option and that it is the default option?如何确保 xcb 是一个选项并且它是默认选项?

*I use myapp -platform android since I know that Android is not in there. *我使用myapp -platform android因为我知道 Android 不在那里。 The dynamically linked QT from sudo apt install qt shows来自sudo apt install qt的动态链接 QT 显示

Available platform plugins are: eglfs, linuxfb, minimal, minimalegl, offscreen, xcb.可用的平台插件有:eglfs、linuxfb、minimum、minimalegl、offscreen、xcb。

I would like that from my static compile.我希望从我的静态编译。 Here are my QPA backends (I do see eglfs for X11, and maybe that is what I have to trigger...)这是我的 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

My hello_plugin_import has this:我的 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)

Update.更新。 I noticed that I can install a bunch of libxcb packages into my sysroot.我注意到我可以在我的 sysroot 中安装一堆 libxcb 包。 I think if I do this, I can get xcb to show up as platform option (or even default platform option??).我想如果我这样做,我可以让 xcb 显示为平台选项(甚至默认平台选项??)。 But does this mess up my static compile?但这会搞乱我的静态编译吗? Will my customer also need to have all these libraries installed or will qmake do the right thing?我的客户是否还需要安装所有这些库,或者 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

I believe that when you configure Qt with -static , you are baking the platform plugin into the build and you won't be able to swap between plugins later on.我相信,当您使用-static配置 Qt 时,您将平台插件烘焙到构建中,以后您将无法在插件之间进行交换。 I'm not certain about this, but I've been down that road and wasn't able to get the qpa switching working, there was only ever one platform plugin listed.我不确定这一点,但我一直在这条路上,无法让 qpa 切换工作,只列出了一个平台插件。 If there is a way, I'd be very interested to hear about it!如果一种方法,我会听到这件事很感兴趣!

If I'm correct in this, then to use xcb instead of eglfs, you'll need to reconfigure Qt with the first line of your configure something like:如果我在这个正确的,那么使用XCB,而不是eglfs,你就需要重新配置的Qt与您的第一线configure是这样的:

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

Good luck祝你好运

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM