Change The World

沉默是一种力量,嘶吼就不是力量了?

0%

交叉编译Qt5.8.0

基本目标

在主机(Ubuntu)CPU架构为x86_64上编译出可以在CPU架构为armv7l主机(Debian)上运行的Qt

环境基本信息

名称 信息 备注
ubuntu-16-04 Intel® Xeon® Silver 4114 CPU @ 2.20GHz(4 core) / 4G

环境搭建

构建Debian模拟文件系统

参考1

注:构建系统时架构需要设置为armhf

通过以上操作后,假设我们的文件系统路径如下:

1
/demo/workplace/linux-rootfs-armhf

安装依赖库

1
2
3
4
5
$ sudo chroot /demo/workplace/linux-rootfs-armhf
$ sudo apt install libgles2-mesa-dev bison build-essential gperf flex ruby python libasound2-dev \
libbz2-dev libcap-dev libcups2-dev libdrm-dev libegl1-mesa-dev libgcrypt11-dev libnss3-dev \
libpci-dev libpulse-dev libudev-dev libxtst-dev gyp ninja-build libglu1-mesa-dev \
libfontconfig1-dev libx11-xcb-dev libicu-dev libgl1-mesa-dev libglu1-mesa-dev libssl1.0-dev

安装交叉编译器

1
2
$ sudo apt install binutils-arm-linux-gnueabihf \
gcc-arm-linux-gnueabihf cpp-arm-linux-gnueabihf g++-arm-linux-gnueabihf

编译Qt5.8.0

下载Qt5.8.0源码

1
$  wget https://download.qt.io/new_archive/qt/5.8/5.8.0/single/qt-everywhere-opensource-src-5.8.0.tar.xz

解压Qt5.8.0源码包

1
$  tar xvf https://download.qt.io/new_archive/qt/5.8/5.8.0/single/qt-everywhere-opensource-src-5.8.0.tar.xz

修改源码中存在的bug

  1. 缺少头文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
$ cd qt-everywhere-opensource-src-5.8.0
$ vim qtserialbus/src/plugins/canbus/socketcan/socketcanbackend.cpp
...

#include <QtCore/qdebug.h>
#include <QtCore/qdatastream.h>
#include <QtCore/qsocketnotifier.h>

#include <linux/can/error.h>
#include <linux/can/raw.h>
#include <errno.h>
#include <unistd.h>
#include <net/if.h>
#include <sys/ioctl.h>
#include <sys/time.h>
#include <linux/sockios.h> // 添加该头文件
...
  1. Fix build when xkbcommon is disabled

添加arm-gnueabihf-g++编译器配置文件

1
2
3
$ cd qt-everywhere-opensource-src-5.8.0
$ cp -a qtbase/mkspecs/linux-arm-gnueabi-g++ qtbase/mkspecs/linux-arm-gnueabihf-g++
$ sed -i 's#linux-arm-gnueabi#linux-arm-gnueabihf#g' qtbase/mkspecs/linux-arm-gnueabihf-g++/qmake.conf

开始编译

1
2
3
4
5
6
7
8
9
10
$ ./configure -release -device linux-arm-generic-g++  -sysroot /demo/workplace/linux-rootfs-armhf -prefix /usr/local/Qt-5.8.0 -xplatform linux-arm-gnueabihf-g++ -opensource -confirm-license -nomake tests

$ make && make instal

# 由于编译时间较长可以将编译放入后台执行
# 比如写一个build.sh 脚本内容如
# #!/bin/bash
# make && make install

$ nohup ./build.sh 2> make-err.log | tee make-out.log &

注:编译时间较长请耐心等待

参考

  1. debootstrap 制作arm64位根文件系统
不如请我吃根冰棒吧