首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从Qt5存储库为Raspberry编译Raspberry的Qt5开发分支?

如何从Qt5存储库为Raspberry编译Raspberry的Qt5开发分支?
EN

Stack Overflow用户
提问于 2015-05-11 08:32:14
回答 1查看 808关注 0票数 1

网络上有一些教程,它们解释了如何为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本身是如何编译的呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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++文件。

代码语言:javascript
复制
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:

代码语言:javascript
复制
   ./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

需要特别注意以下参数:

  1. -xplatform linux-arm-gnueabi-g++这是mkspec。因此,如果没有编辑linux-arm g++,而是创建了一个新的mkspec,则可以相应地更改名称。
  2. -设备-选项交叉编译=/arm-linux-gnueabihf-不确定是否有此必要。在一些教程里找到的。没有这个选项一切都很顺利。调整到交叉编译器,就像在mkspec中一样。
  3. -sysroot /home/me/rasp非常重要。Raspberry Pi被安装的安装点。
  4. -prefix /usr/local/qt5pi,其中Qt5将安装在RPi上

现在要做的就是做通常的事情:make/。该命令构建Qt5并将其安装在Raspberry上的/usr/qt5pi中。确保此位置存在正确的写权限。

还有一件事:

qtwayland/src/hardwareintegration/client/brcm-egl/qwaylandbrcmeglintegration.h

当我编译我的qt5时包含了一个bug。一个快速的解决方法是编辑这个文件:

代码语言:javascript
复制
#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。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30162940

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档