如何为 Raspberry Pi 交叉编译 Qt Quick 应用程序?
How to cross-compile a Qt Quick application for the Raspberry Pi?
我成功地为 Raspberry Pi 交叉编译了 "standard" Qt 应用程序 (QT += core gui
),但是我在使用 Qt Quick (QT += quick
).
我安装了 cross-compiling tool-chain and successfully compiled Qt with it,我的 Qt GUI 应用程序现在可以 运行 上 Raspberry Pi。
现在我尝试 运行 Raspberry Pi 上的 Qt Quick 示例之一,但没有成功。我从 Welcome/Examples 打开示例,我可以在我的 PC 上使用 Debian 成功构建和 运行 它们,但是如果我尝试为 Raspberry Pi 构建它(通过添加我使用的相同工具包对于常规 Qt 应用程序),它甚至无法编译。它给出以下错误:
:-1: error: Unknown module(s) in QT: quick
这似乎表明 Qt Quick 不是我的 Qt 构建的一部分。
我又查了一下交叉编译器是怎么配置的:
Building on: linux-g++ (x86_64, CPU features: mmx sse sse2)
Building for: devices/linux-rasp-pi-g++ (arm, CPU features: none detected)
Platform notes:
- Also available for Linux: linux-clang linux-kcc linux-icc linux-cxx
Build options:
Configuration .......... accessibility audio-backend c++11 clock-gettime clock-monotonic compile_examples concurrent cross_compile dbus egl eglfs eglfs_brcm enable_new_dtags evdev eventfd freetype full-config getaddrinfo getifaddrs harfbuzz iconv inotify ipv6ifname large-config largefile linuxfb medium-config minimal-config mremap nis no-pkg-config opengl opengles2 pcre png posix_fallocate precompile_header qpa qpa reduce_exports release rpath shared small-config system-zlib threadsafe-cloexec
Build parts ............ libs
Mode ................... release
Using sanitizer(s)...... none
Using C++ standard ..... c++11
Using gold linker....... no
Using new DTAGS ........ yes
Using PCH .............. yes
Target compiler supports:
Neon ................. no
Qt modules and options:
Qt D-Bus ............... yes (loading dbus-1 at runtime)
Qt Concurrent .......... yes
Qt GUI ................. yes
Qt Widgets ............. yes
Large File ............. yes
QML debugging .......... yes
Use system proxies ..... no
Support enabled for:
Accessibility .......... yes
ALSA ................... no
CUPS ................... no
Evdev .................. yes
FontConfig ............. no
FreeType ............... yes (bundled copy)
Glib ................... no
GStreamer .............. no
GTK theme .............. no
HarfBuzz ............... yes (bundled copy)
Iconv .................. yes
ICU .................... no
Image formats:
GIF .................. yes (plugin, using bundled copy)
JPEG ................. yes (plugin, using bundled copy)
PNG .................. yes (in QtGui, using bundled copy)
libinput................ no
Logging backends:
journald ............... no
syslog ............... no
mtdev .................. no
Networking:
getaddrinfo .......... yes
getifaddrs ........... yes
IPv6 ifname .......... yes
libproxy.............. no
OpenSSL .............. no
NIS .................... yes
OpenGL / OpenVG:
EGL .................. yes
OpenGL ............... yes (OpenGL ES 2.0+)
OpenVG ............... no
PCRE ................... yes (bundled copy)
pkg-config ............. no
PulseAudio ............. no
QPA backends:
DirectFB ............. no
EGLFS ................ yes
EGLFS i.MX6....... . no
EGLFS KMS .......... no
EGLFS Mali ......... no
EGLFS Raspberry Pi . yes
EGLFS X11 .......... no
LinuxFB .............. yes
Mir client............ no
XCB .................. no
Session management ..... yes
SQL drivers:
DB2 .................. no
InterBase ............ no
MySQL ................ no
OCI .................. no
ODBC ................. no
PostgreSQL ........... no
SQLite 2 ............. no
SQLite ............... yes (plugin, using bundled copy)
TDS .................. no
tslib .................. no
udev ................... no
xkbcommon-x11........... no
xkbcommon-evdev......... no
zlib ................... yes (system library)
Qt Quick 甚至没有出现在选项列表中。这是否意味着交叉编译器不支持它?选项 "QML debugging" 让我觉得它应该是,因为如果不是 Qt Quick,还有什么应该使用 QML。
OpenGL 2.0 处于活动状态,所以这应该不是问题。
由于我的 PC 确实有一个 Qt5Quick
库,而 Raspberry Pi 上没有同名的库,看来它根本就没有构建。
指南按依赖顺序列出了可选模块,但还不够。
构建qtquickcontrols
和qtquick2
后,问题解决了。
挂载SD卡镜像后,
cd ~/opt/qt5/qtquickcontrols
/usr/local/qt5pi/bin/qmake .
make -j4
sudo make install
其他的依此类推。然后把图片写回SD卡,Qt Quick就可以运行(哪怕只是全屏)就Raspberry Pi.
我在 Raspberry 3 上成功使用了 QtRpi 脚本。您可以在 http://www.qtrpi.com 下载它,它是一个随时可用的工具,可以在您的 Linux 主机上安装交叉编译器工具链和一个完整的Rpi 上的部署环境。
我将它与 Qt Quick 一起用于我的应用程序,它运行没有任何问题。
我成功地为 Raspberry Pi 交叉编译了 "standard" Qt 应用程序 (QT += core gui
),但是我在使用 Qt Quick (QT += quick
).
我安装了 cross-compiling tool-chain and successfully compiled Qt with it,我的 Qt GUI 应用程序现在可以 运行 上 Raspberry Pi。
现在我尝试 运行 Raspberry Pi 上的 Qt Quick 示例之一,但没有成功。我从 Welcome/Examples 打开示例,我可以在我的 PC 上使用 Debian 成功构建和 运行 它们,但是如果我尝试为 Raspberry Pi 构建它(通过添加我使用的相同工具包对于常规 Qt 应用程序),它甚至无法编译。它给出以下错误:
:-1: error: Unknown module(s) in QT: quick
这似乎表明 Qt Quick 不是我的 Qt 构建的一部分。
我又查了一下交叉编译器是怎么配置的:
Building on: linux-g++ (x86_64, CPU features: mmx sse sse2)
Building for: devices/linux-rasp-pi-g++ (arm, CPU features: none detected)
Platform notes:
- Also available for Linux: linux-clang linux-kcc linux-icc linux-cxx
Build options:
Configuration .......... accessibility audio-backend c++11 clock-gettime clock-monotonic compile_examples concurrent cross_compile dbus egl eglfs eglfs_brcm enable_new_dtags evdev eventfd freetype full-config getaddrinfo getifaddrs harfbuzz iconv inotify ipv6ifname large-config largefile linuxfb medium-config minimal-config mremap nis no-pkg-config opengl opengles2 pcre png posix_fallocate precompile_header qpa qpa reduce_exports release rpath shared small-config system-zlib threadsafe-cloexec
Build parts ............ libs
Mode ................... release
Using sanitizer(s)...... none
Using C++ standard ..... c++11
Using gold linker....... no
Using new DTAGS ........ yes
Using PCH .............. yes
Target compiler supports:
Neon ................. no
Qt modules and options:
Qt D-Bus ............... yes (loading dbus-1 at runtime)
Qt Concurrent .......... yes
Qt GUI ................. yes
Qt Widgets ............. yes
Large File ............. yes
QML debugging .......... yes
Use system proxies ..... no
Support enabled for:
Accessibility .......... yes
ALSA ................... no
CUPS ................... no
Evdev .................. yes
FontConfig ............. no
FreeType ............... yes (bundled copy)
Glib ................... no
GStreamer .............. no
GTK theme .............. no
HarfBuzz ............... yes (bundled copy)
Iconv .................. yes
ICU .................... no
Image formats:
GIF .................. yes (plugin, using bundled copy)
JPEG ................. yes (plugin, using bundled copy)
PNG .................. yes (in QtGui, using bundled copy)
libinput................ no
Logging backends:
journald ............... no
syslog ............... no
mtdev .................. no
Networking:
getaddrinfo .......... yes
getifaddrs ........... yes
IPv6 ifname .......... yes
libproxy.............. no
OpenSSL .............. no
NIS .................... yes
OpenGL / OpenVG:
EGL .................. yes
OpenGL ............... yes (OpenGL ES 2.0+)
OpenVG ............... no
PCRE ................... yes (bundled copy)
pkg-config ............. no
PulseAudio ............. no
QPA backends:
DirectFB ............. no
EGLFS ................ yes
EGLFS i.MX6....... . no
EGLFS KMS .......... no
EGLFS Mali ......... no
EGLFS Raspberry Pi . yes
EGLFS X11 .......... no
LinuxFB .............. yes
Mir client............ no
XCB .................. no
Session management ..... yes
SQL drivers:
DB2 .................. no
InterBase ............ no
MySQL ................ no
OCI .................. no
ODBC ................. no
PostgreSQL ........... no
SQLite 2 ............. no
SQLite ............... yes (plugin, using bundled copy)
TDS .................. no
tslib .................. no
udev ................... no
xkbcommon-x11........... no
xkbcommon-evdev......... no
zlib ................... yes (system library)
Qt Quick 甚至没有出现在选项列表中。这是否意味着交叉编译器不支持它?选项 "QML debugging" 让我觉得它应该是,因为如果不是 Qt Quick,还有什么应该使用 QML。
OpenGL 2.0 处于活动状态,所以这应该不是问题。
由于我的 PC 确实有一个 Qt5Quick
库,而 Raspberry Pi 上没有同名的库,看来它根本就没有构建。
指南按依赖顺序列出了可选模块,但还不够。
构建qtquickcontrols
和qtquick2
后,问题解决了。
挂载SD卡镜像后,
cd ~/opt/qt5/qtquickcontrols
/usr/local/qt5pi/bin/qmake .
make -j4
sudo make install
其他的依此类推。然后把图片写回SD卡,Qt Quick就可以运行(哪怕只是全屏)就Raspberry Pi.
我在 Raspberry 3 上成功使用了 QtRpi 脚本。您可以在 http://www.qtrpi.com 下载它,它是一个随时可用的工具,可以在您的 Linux 主机上安装交叉编译器工具链和一个完整的Rpi 上的部署环境。
我将它与 Qt Quick 一起用于我的应用程序,它运行没有任何问题。