树莓派4B——交叉编译QT5.9.9(带OpenGL ES2)

在阅读本文之前,请先参考我的另一篇文章:
https://www.jianshu.com/p/3b5c0e0fd674
其中有讲解编译链工具的下载和配置,以及QT5.9.9源码的编译,但是上次是没有配置OpenGL的,所以涉及3D渲染的开发是没法使用的,这次重新来过,主要解决OpenGL的编译问题。

配置QT源码:

同样地解压QT5.9.9的源码到armv7l目录。

进入QT源码根目录,在qtbase/mkspecs子目录下已经为各种平台准备好了相应的编译配置,
但是我们这里是linux-arm-gnueabihf平台,发现找不到,复制一个来修改:
cp linux-arm-gnueabi-g++ linux-arm-gnueabihf-g++ -r
编辑linux-arm-gnueabihf-g++/qmake.conf,把里面的arm-linux-gnueabi改成arm-linux-gnueabihf,修改内容如下:

#
# qmake configuration for building with arm-linux-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                = arm-linux-gnueabihf-gcc
QMAKE_CXX               = arm-linux-gnueabihf-g++
QMAKE_LINK              = arm-linux-gnueabihf-g++
QMAKE_LINK_SHLIB        = arm-linux-gnueabihf-g++

# modifications to linux.conf
QMAKE_AR                = arm-linux-gnueabihf-ar cqs
QMAKE_OBJCOPY           = arm-linux-gnueabihf-objcopy
QMAKE_NM                = arm-linux-gnueabihf-nm -P
QMAKE_STRIP             = arm-linux-gnueabihf-strip
load(qt_config)

回到QT源码根目录,继续执行:
mkdir build
cd build
然后创建autoconfig.sh,输入如下内容:

#!/bin/bash

rm config.cache

SYSROOT=/home/kdjie/armv7l/sysroot-glibc-linaro-2.25-2019.12-arm-linux-gnueabihf
PREFIX=/home/kdjie/armv7l

../configure \
-v \
-confirm-license -opensource \
-prefix ${PREFIX}/qt5.9.9 \
-sysroot ${SYSROOT} \
-xplatform linux-arm-gnueabihf-g++ \
-no-pch -no-pkg-config -release -shared -make libs \
-nomake examples -nomake tests \
-xcb -xcb-xlib -no-eglfs \
-qpa xcb \
-linuxfb \
-opengl es2 

然后执行:
chmod +x autoconfig.sh
./autoconfig.sh

稍等几分钟,不出意外的话会提示如下错误:

Note: No wayland-egl support detected. Cross-toolkit compatibility disabled.

WARNING: Feature xcb-xlib is insignificant in this configuration, ignoring related command line option(s).

ERROR: Feature 'opengles2' was enabled, but the pre-condition 'config.win32 || (!config.watchos && !features.opengl-desktop && libs.opengl_es2)' failed.

ERROR: The OpenGL functionality tests failed!
You might need to modify the include and library search paths by editing QMAKE_INCDIR_OPENGL[_ES2],
QMAKE_LIBDIR_OPENGL[_ES2] and QMAKE_LIBS_OPENGL[_ES2] in the mkspec for your platform.
解决问题:

查看config.log文件内容,它记录了配置过程的细节,搜索”ES2",找到如下内容:

> main.cpp:6:12: fatal error: GLES2/gl2.h: 没有那个文件或目录
>  #  include <GLES2/gl2.h>
>             ^~~~~~~~~~~~~
> compilation terminated.
> gmake: *** [main.o] 错误 1
 => source failed verification.
test config.gui.libraries.opengl_es2 FAILED

显示缺少GLES2/gl2.h,我们可以去树莓派镜像上找,关于树莓派镜像文件的提取,请参考本人另一篇文章:
https://www.jianshu.com/p/41879d5864f8
进入树莓派系统目录后,执行:
[root@localhost raspios_rootfs]# find . | grep gl2.h
./opt/vc/include/GLES2/gl2.h

拷贝头文件:
cd /home/kdjie/armv7l/sysroot-glibc-linaro-2.25-2019.12-arm-linux-gnueabihf/usr/include
拷贝GLES2所需的头文件:
cp /mnt/raspios_rootfs/opt/vc/include/GLES2 . -r -i
cp /mnt/raspios_rootfs/opt/vc/include/KHR . -r -i
或者全拷:
cp /mnt/raspios_rootfs/opt/vc/include/* . -r -i

然后重新执行autoconfig.sh,仍然配置不通过,继续查看错误细节,找到如下内容:

> /home/kdjie/armv7l/gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabihf/bin/../lib/gcc/arm-linux-gnueabihf/7.5.0/../../../../arm-linux-gnueabihf/bin/ld.gold: error: cannot find -lGLESv2
> main.o:main.cpp:function main: error: undefined reference to 'glUniform1f'
> main.o:main.cpp:function main: error: undefined reference to 'glClear'
> collect2: error: ld returned 1 exit status
> gmake: *** [opengl_es2] 错误 1
 => source failed verification.
test config.gui.libraries.opengl_es2 FAILED

显示缺少libGLESv2.so这个文件,再到树莓派系统目录中找:
[root@localhost raspios_rootfs]# find . | grep libGLESv2.so
./opt/minecraft-pi/lib/brcm/libGLESv2.so
./opt/minecraft-pi/lib/mesa/libGLESv2.so
./usr/lib/scratch3/swiftshader/libGLESv2.so
./usr/lib/scratch3/libGLESv2.so
./usr/lib/chromium-browser/swiftshader/libGLESv2.so
./usr/lib/arm-linux-gnueabihf/libGLESv2.so.2.1.0
./usr/lib/arm-linux-gnueabihf/libGLESv2.so.2

拷贝库:
cd /home/kdjie/armv7l/sysroot-glibc-linaro-2.25-2019.12-arm-linux-gnueabihf/usr/lib
cp /mnt/raspios_rootfs/usr/lib/arm-linux-gnueabihf/libGLESv2.so.2.1.0 . -i
ln -s libGLESv2.so.2.1.0 libGLESv2.so
ln -s libGLESv2.so.2.1.0 libGLESv2.so.2
这里建立了两个符号链接,其中libGLESv2.so.2是后面编译应用程序的时候要用。

还有要注意:
libGLESv2.so 通常情况下会依赖 libGLdispatch.so,我里一并把它拷贝过来。
到树莓派系统目录中找:
[root@localhost raspios_rootfs]# find . | grep libGLdispatch.so
./usr/lib/arm-linux-gnueabihf/libGLdispatch.so.0
./usr/lib/arm-linux-gnueabihf/libGLdispatch.so.0.0.0
拷贝库:
cd /home/kdjie/armv7l/sysroot-glibc-linaro-2.25-2019.12-arm-linux-gnueabihf/usr/lib
cp /mnt/raspios_rootfs/usr/lib/arm-linux-gnueabihf/libGLdispatch.so.0.0.0 . -i
ln -s libGLdispatch.so.0.0.0 libGLdispatch.so.0

继续重新执行autoconfig.sh,终于配置通过:

  OpenGL:
    Desktop OpenGL ....................... no
    OpenGL ES 2.0 ........................ yes
    OpenGL ES 3.0 ........................ no
    OpenGL ES 3.1 ........................ no
......
Qt is now configured for building. Just run 'gmake'.
Once everything is built, you must run 'gmake install'.
Qt will be installed into '/home/kdjie/armv7l/sysroot-glibc-linaro-2.25-2019.12-arm-linux-gnueabihf/home/kdjie/armv7l/qt5.9.9'.
编译:

make
在我的i5机器上大约等待3个小时,编译完成后,安装:
make install
qt5.9.9软件包将被放到 {SYSROOT}/{PREFIX} 指定的目录下,我这里是/home/kdjie/armv7l/sysroot-glibc-linaro-2.25-2019.12-arm-linux-gnueabihf/home/kdjie/armv7l。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,240评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,328评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,182评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,121评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,135评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,093评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,013评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,854评论 0 273
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,295评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,513评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,678评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,398评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,989评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,636评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,801评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,657评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,558评论 2 352

推荐阅读更多精彩内容