网络上有一些教程,它们解释了如何为Raspberry编译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本身是如何编译的呢?
发布于 2015-05-11 09:24:55
要为Raspberry Pi创建一个Qt5,需要执行几个步骤:
从git获取Qt5源。要签出Qt5:
git克隆http://code.qt.io/cgit/qt/qt5.git
或
git克隆http://code.qt.io/qt/qt5.git
存储库可能会不时更改。qt项目仍在发展中。
上面的命令在Linux主机上完成。要将开发工具分支cd发送到qt5,请执行以下操作:
git签出开发
紧接着是
./initRepository
这需要相当长的时间。此时,可以挂载Raspberry Pi根文件夹。可以使用读卡器和安装SD卡。一个更好的解决方案是使用nfs、samba、sshfs来安装一个Raspberry Pi。这样,一些小的bug,例如缺少的dev包,就很容易修复“动态”。
我使用sshfs:
sshfs pi@raspberrypi:/ /home/me/rasp
如果安装成功,Raspberry Pi的根文件系统可以在/home/me/rasp下访问。
一旦签出Qt5,必须立即进行以下更改:在qt5 5/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必须用交叉编译器替换,该编译器是根据: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需要特别注意以下参数:
现在要做的就是做通常的事情:make/。该命令构建Qt5并将其安装在Raspberry上的/usr/qt5pi中。确保此位置存在正确的写权限。
还有一件事:
qtwayland/src/hardwareintegration/client/brcm-egl/qwaylandbrcmeglintegration.h
当我编译我的qt5时包含了一个bug。一个快速的解决方法是编辑这个文件:
#include <QtWaylandClient/private/qwaylandclientbufferintegration_p.h>
#include <wayland-client.h> <--- add this below the #include above.最后一件事:这个qt5是,而不是,适合在树莓Pi内部使用。创建程序时,必须挂载RPi ,在编译Qt5的同一台主机上执行编译。
最后一件事: RPi不支持xcb。因此X11转发是不可能的。
编辑:我被告知这不是真的。不,它不是。然而,事实是,RPi不支持使用OpenGL的程序的xcb/X11。所以没有QtQuick2程序:http://lists.qt-project.org/pipermail/qtonpi/2012-October/001087.html
目前对此没有什么可做的,它的图形驱动程序根本不支持它。Wayland的支持有限。使用的最佳平台是eglfs。
https://stackoverflow.com/questions/30162940
复制相似问题