如何在树莓派上编译Qt 5.14.2 和 Qt Creator 4.12

图片来自Qt官网

前言

最近在树莓派上做一些Qt开发相关的内容,本文简单记录一下如何在树莓派上编译最新的Qt 5.14.2(2020-04-30),如果你刚好也在寻找类似的内容,希望本篇文章可以帮助到你。

硬件要求

  • 树莓派(我这里使用的是树莓派4B 1GB版本,够用,但是条件如果允许,建议大家考虑2GB版本或更高)
  • 内存卡(16GB及以上)

下载源码

由于5.14版本并不能直接使用apt-get方式去安装,所以我们需要从源码安装,当然这一过程还是非常耗时的(请做好心理准备…),使用apt-get方式安装的Qt版本大约在5.11上,可以看出还是有几个版本的距离,那么废话少说,我们先将源码下载下来:

Qt 5.14.2 源码下载:http://download.qt.io/archive/qt/5.14/5.14.2/single/qt-everywhere-src-5.14.2.tar.xz
我们既然要安装最新的Qt版本,那么一并也将最新版本的Qt Creator安装了吧,编译过程同样相当耗时。

Qt Creator 源码下载:https://download.qt.io/official_releases/qtcreator/4.12/4.12.0/qt-creator-opensource-src-4.12.0.tar.gz

编译Qt 5.14.2

我们这里需要先编译Qt 5.14.2,然后再编译Qt Creator,因为Qt Creator其实是用Qt写的,所以只有我们把Qt编译好了,才可以去编译Qt Creator。

交换空间增大

~ $ sudo nano /etc/dphys-swapfile

CON_SWAPSIZE=100修改为CON_SWAPSIZE=1024
然后执行下面的命令:

~ $ sudo /etc/init.d/dphys-swapfile stop
~ $ sudo /etc/init.d/dphys-swapfile start

安装依赖

~ $ sudo apt-get build-dep qt4-x11
~ $ sudo apt-get build-dep libqt5gui5
~ $ sudo apt-get install libudev-dev libinput-dev libts-dev libxcb-xinerama0-dev libxcb-xinerama0 libclipper-dev

解压源码

~ $ tar -xvf qt-everywhere-src-5.14.2.tar.xz

新建文件夹用来编译(影子编译)

~ $ mkdir build
~ $ cd build

配置编译选项

build $ PKG_CONFIG_LIBDIR=/usr/lib/arm-linux-gnueabihf/pkgconfig:/usr/share/pkgconfig \
../qt-everywhere-src-5.14.2/configure -platform linux-rpi4-v3d-g++ \
-v \
-opengl es2 -eglfs \
-no-gtk \
-opensource -confirm-license -release \
-reduce-exports \
-force-pkg-config \
-nomake examples -no-compile-examples \
-skip qtwayland \
-skip qtwebengine \
-no-feature-geoservices_mapboxgl \
-qt-pcre \
-no-pch \
-ssl \
-evdev \
-system-freetype \
-fontconfig \
-glib \
-prefix /opt/Qt5.14 \
-qpa eglfs \
-qt-xcb

这里的编译选项大家先不用理解,跟上面保持一致即可。

编译

配置完成后,我们就可以开始编译了,这里强烈建议将树莓派放到不碍事的地方,因为编译非常耗时,中断会浪费很多时间,然后最好可以配一个散热风扇,实测不加散热风扇并启用多核编译的话CPU温度最高能达到60摄氏度。

build $ make #没有散热风扇,不启用多核编译
build $ make -j4 #有散热风扇可以考虑使用这条命令

不过先不要着急,我在实际测试的时候还需要单独编译三个模块,不然后面安装会报错

build $ cd qtlocation/src/3rdparty/clip2tri
clip2tri $ sudo make
clip2tri $ cd qtlocation/src/3rdparty/clipper
clipper $ sudo make
clipper $ cd qtlocation/src/3rdparty/poly2tri
poly2tri $ sudo make
poly2tri $ cd ~/build

这里具体为什么需要单独编译,我也不是很清楚,可能是前面配置的问题,但是可配置选项非常多,我也没有太仔细的研究,大家感兴趣的可以看一下。

安装

安装就相对简单了,我们只需要执行下面的命令即可,不过时间也稍微长一点,大家耐心等候即可:

build $ sudo make install

安装完成后我们测试下qmake是否可用:

build $ /opt/Qt5.14/bin/qmake -v

如果没有错误的话就应该可以看见跟下面一样的输出了:

QMake version 3.1
Using Qt version 5.14.2 in /opt/Qt5.14/lib

将Qt 5.14.2 设置为默认的Qt 版本

build $ sudo nano /usr/share/qtchooser/qt5.14-compile-byself.conf

将下面两行代码保存到文件中:

/opt/Qt5.14/bin
/opt/Qt5.14/lib

然后修改下.bashrc文件

build $ nano ~/.bashrc

在文件的最后增加下面一行内容:

export QT_SELECT=qt5.14-compile-byself

最后我们使设置生效:

build $ source ~/.bashrc

然后我们再测试一下,直接测试qmake,不带路径,看看能不能够正确输出:

build $ qmake -v

如果可以正确输出Qt版本,恭喜你,到这一步就完成了!

编译Qt Creator 4.12

我们再前面已经成功将Qt编译好了,那么接下来我们编译一下Qt Creator,可能有人不晓得这是什么,简单来说这是一个Qt的IDE,功能非常强大,开发Qt必备之良药,当然项目本身就是Qt编写的,大家通过这个工具也能够从侧面看出Qt的强大了,那么废话少说,我们开始编译吧!

解压源码

~ $ tar -xvf qt-creator-opensource-src-4.12.0.tar.xz

新建文件夹用来编译(影子编译)

~ $ mkdir qtcreator-build
~ $ cd qtcreator-build

编译

编译倒是没那么复杂,不过也是一个非常耗时的过程,大约得五六个小时左右…
依次执行下面的命令即可:

qtcreator-build $ qmake -r ../qt-creator-opensource-src-4.12.0
qtcreator-build $ make -j4 #如果树莓派没有任何散热方式,不建议追加 -j4

接下来就是漫长的等待,只要你上面Qt编译没错并安装成功后,这里基本不会有问题,你需要的只有等待一下。

安装

qtcreator-build $ make install

安装完成后有点小Bug,就是我们没法在快捷启动里找到Qt Creator,不过没关系,我们只需要复制一个文件就可以了。

qtcreator-build $ sudo cp /share/applications/org.qt-project.qtcreator.desktop /usr/share/applications/

我猜测是快捷启动没有索引这个目录,不过没仔细研究,我们复制到那个文件下就可以从快捷启动中使用了。

测试

到上一步,我们就已经将Qt和Qt Creator都安装好了,我们这里编译一个官方例程来测试一下!

~ $ cp qt-everywhere-src-5.14.2/qtbase/examples/opengl/2dpainting/ ./ -r

然后我们用Qt Creator打开工程,然后点击编译和运行按钮。
编译稍微有点慢,请耐心等候一会。
运行结果:
运行结果
恭喜你,到这里你已经成功将开发环境搭建好了。

请我喝一罐冰阔乐 (^o^)/