仅在交叉编译 Raspberry PI 的 QT 静态时进行 eglfs
Only eglfs when cross-compiling QT static for Raspberry PI
我使用 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
其中"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平台插件"安卓"在"此应用程序失败 启动是因为无法初始化Qt平台插件。重新安装 应用程序可能会解决此问题。
可用的平台插件有:eglfs,eglfs。
工厂装载机出现故障很好,但为什么只有 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软件包。我想如果我这样做,我可以让 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
我相信当你用-static
配置Qt时,你正在将平台插件烘焙到构建中,以后你将无法在插件之间交换。我不确定这一点,但我一直在走这条路,无法让 qpa 切换工作,只列出了一个平台插件。如果有办法,我很想听听!
如果我是正确的,那么要使用 xcb 而不是 eglfs,您需要使用configure
的第一行重新配置 Qt,如下所示:
./configure -no-eglfs -qpa xcb -qt-xcb -opensource -confirm-license -release -static
祝你好运
- 如果C++类在类方法中具有动态分配,但没有构造函数/析构函数或任何非静态成员,那么它仍然是POD类型吗
- #为""定义宏;静态";针对不同的上下文
- cmake如何在fedora工作站中找到boost静态库包
- 静态数据成员的问题-修复链接错误会导致编译器错误
- 将公共但非静态的成员函数与ALGLIB集成
- cmake在我的项目中所需的所有静态库都不成功
- C++从另一个类访问公共静态向量的正确方法是什么
- 基于boost的程序的静态链接——zlib问题
- 在静态库中嵌入类方法
- Qt C++静态thread_local QNetworkAccessManager是线程应用程序的好选择吗
- 如何在C++中获得"静态纯虚拟"功能?
- 私有类型的静态常量成员
- 使用gcc从静态链接的文件中查找可选符号
- 在 .h 文件中的类中声明静态变量和在.cpp文件中声明"global"变量有什么区别
- 如何在C++中使用非静态成员函数作为回调函数
- 将静态库链接到不带-fPIC的共享库中
- 静态结构和一个定义规则
- 为什么虚函数不能是静态的和全局的?
- C++17中函数模板中的静态数组初始化(MSVC 2019)
- 仅在交叉编译 Raspberry PI 的 QT 静态时进行 eglfs