网上有一些教程,解释了如何为Raspberry Pi编译Qt5。不幸的是,他们都有点过时了。通常会为某些GLIBC函数获取“未定义的引用”。 这个问题和答案解释了如何创建一个最新的(2015年3月)gcc交叉编译器: How can I create a modern cross compile toolchain for the Raspberry Pi 1?
这个问题和答案解释了为编写Raspbian本身需要做些什么才能被这个编译器使用: How do I prepare a Raspberry Pi with Raspbian so I can cross compile Qt5 programs from a Linux host?
但是Qt5本身是如何编译的?
答案 0 :(得分:1)
要为Raspberry Pi创建Qt5,需要执行几个步骤:
从git获取Qt5源代码。结账Qt5:
git clone http://code.qt.io/cgit/qt/qt5.git
或
git clone http://code.qt.io/qt/qt5.git
存储库可能会不时更改。 qt项目仍在不断发展。
在Linux主机上完成上面的命令。将dev分支cd转换为qt5和:
git checkout dev
接着是
./ initRepository
这需要相当长的时间。这时可以安装Raspberry Pi根文件夹。可以使用读卡器并安装SD卡。一个更好的解决方案是使用nfs,samba,sshfs来安装生命Raspberry Pi。这样小错误,例如缺少开发包,可以轻松修复'即时#。
我使用sshfs:
sshfs pi @ raspberrypi:/ / home / me / rasp
如果此挂载成功,可以在/ home / me / rasp下访问Raspberry Pi的根文件系统。
签出Qt5后,必须进行以下更改: 在qt5 / qtbase / mkspecs中,必须编辑(或复制和编辑)文件linux-arm-gnueabi-g ++
MAKEFILE_GENERATOR = UNIX
CONFIG += incremental
QMAKE_INCREMENTAL_STYLE = sublib
include(../common/linux.conf)
include(../common/gcc-base-unix.conf)
include(../common/g++-unix.conf)
# modifications to g++.conf
QMAKE_CC = <path to>/arm-linux-gnueabihf-gcc
QMAKE_CXX = <path to>/arm-linux-gnueabihf-g++
QMAKE_LINK = <path to>/arm-linux-gnueabihf-g++
QMAKE_LINK_SHLIB = <path to>/arm-linux-gnueabihf-g++
# modifications to linux.conf
QMAKE_AR = <path to>/arm-linux-gnueabihf-ar cqs
QMAKE_OBJCOPY = <path to>/arm-linux-gnueabihf-objcopy
QMAKE_NM = <path to>/arm-linux-gnueabihf-nm -P
QMAKE_STRIP = <path to>/arm-linux-gnueabihf-strip
QMAKE_INCDIR_EGL = $$[QT_SYSROOT]/opt/vc/include/EGL/
QMAKE_INCDIR_OPENGL_ES2 = $$[QT_SYSROOT]/opt/vc/include/GLES2/
QMAKE_INCDIR_OPENVG = $$[QT_SYSROOT]/opt/vc/include/VG/
QMAKE_LIBDIR_EGL = $$[QT_SYSROOT]/opt/vc/lib/
QMAKE_LIBDIR_OPENGL_ES2 = $$[QT_SYSROOT]/opt/vc/lib/
QMAKE_LIBDIR_OPENVG = $$[QT_SYSROOT]/opt/vc/lib/
QMAKE_LIBS_EGL = -lEGL -lGLESv2
QMAKE_LIBS_OPENVG = -lOpenVG -lEGL -lGLESv2
QMAKE_LIBS_OPENGL_ES2 = -lEGL -lGLESv2
LIBS += -L$$[QT_SYSROOT]/opt/vc/lib -lvcos -lbcm_host -lvchiq_arm
LIBS += -lEGL -lGLESv2
INCLUDEPATH += $$[QT_SYSROOT]/opt/vc/include
INCLUDEPATH += $$[QT_SYSROOT]/opt/vc/include/interface/vcos
INCLUDEPATH += $$[QT_SYSROOT]/opt/vc/include/interface/vcos/pthreads
INCLUDEPATH += $$[QT_SYSROOT]/opt/vc/include/interface/vmcs_host/linux
&lt;&gt;路径必须用交叉编译器替换,交叉编译器是根据:How can I create a modern cross compile toolchain for the Raspberry Pi 1?
创建的下一步是配置Qt5:
./configure -opengl es2 -device linux-rasp-pi-g++ -device-option CROSS_COMPILE=<path to>/arm-linux-gnueabihf- -xplatform linux-arm-gnueabi-g++ -sysroot /home/me/rasp -opensource -confirm-license -optimized-qmake -release -make libs -prefix /usr/local/qt5pi -v -libinput -linuxfb -directfb -xcb -fontconfig -ts
lib -evdev -iconv -xinput2 -xkbcommon-evdev -eglfs -icu -qt-pcre -lpthread -system-sqlite -no-sql-sqlite2 -gstreamer 1.0 -reduce-exports
需要特别注意以下参数:
-xplatform linux-arm-gnueabi-g ++这是mkspec。如果没有编辑linux-arm-gnueabi-g ++,则会相应地更改名称,但是会创建一个新的mkspec。
-device-option CROSS_COMPILE =&lt; path to&gt; / arm-linux-gnueabihf-不确定,如果有必要的话。在一些教程中找到它。没有这个选项,一切正常。调整&lt;路径到&gt;像在mkspec中一样交叉编译器。
-sysroot / home / me / rasp非常重要。安装Raspberry Pi的安装点。
-prefix / usr / local / qt5pi在RPi上安装Qt5的地方
现在所有要做的事情都是平常的: make / make install。该命令构建Qt5并将其安装在Raspberry Pi上的/ usr / qt5pi中。确保此位置存在正确的写入权限。
还有一件事:
qtwayland / SRC / hardwareintegration /客户端/ BRCM-EGL / qwaylandbrcmeglintegration.h
在我编译qt5时包含了一个错误。 快速解决方法是编辑此文件:
#include <QtWaylandClient/private/qwaylandclientbufferintegration_p.h>
#include <wayland-client.h> <--- add this below the #include above.
最后一件事:这个qt5 NOT 适合在Raspberry Pi中使用。创建程序时,必须安装RPi ,并且编译必须在具有编译Qt5的相同交叉编译器的同一主机下完成。
另一件事:RPi不支持xcb。所以X11转发是不可能的。
编辑:我被告知这不是真的。不,它不是。但是,实际上,RPi不支持使用OpenGL的程序的xcb / X11。所以没有qtquick 2程序:http://lists.qt-project.org/pipermail/qtonpi/2012-October/001087.html
目前没有什么可以做的,它的图形驱动程序根本就不支持它。 Wayland支持有限。最好的平台是eglfs。