在虚拟机中编译Qt5.15.2 源码,需要匹配的工具链,我用过多个工具链进行编译,发现最好的工具链是gcc-arm-9.2-2019.12-x86_64-aarch64-none-linux-gnu。
一、准备好qt5.15.2源码和工具链压缩包
1.qt源码下载地址:https://mirrors.tuna.tsinghua.edu.cn/qt/
2.工具链下载地址:https://mirrors.tuna.tsinghua.edu.cn/armbian-releases/_toolchain/

二、解压压缩包,并开始编译
我是将两个压缩包放在单独的文件夹内: /home/prj/qtpack
1.直接将qt包解压到当前目录:
tar -xf qt-everywhere-src-5.15.2.tar.xz
2.将工具链解压到/opt/文件夹下,这样方便后续使用工具链。
sudo tar -xf gcc-arm-9.2-2019.12-x86_64-aarch64-none-linux-gnu.tar.xz -C /opt/
3.将解压的工具链添加到环境变量。(选择永久设置方法即可)
# 临时添加到当前会话
export PATH=/opt/gcc-arm-9.2-2019.12-x86_64-aarch64-none-linux-gnu/bin:$PATH
# 永久添加到 ~/.bashrc 或 ~/.profile
echo 'export PATH=/opt/gcc-arm-9.2-2019.12-x86_64-aarch64-none-linux-gnu/bin:$PATH' >> ~/.bashrc
source ~/.bashrc
4.验证环境变量是否设置成功。
# 检查交叉编译器是否可用
aarch64-none-linux-gnu-gcc --version
查询后,出现如下即可
Using built-in specs.
COLLECT_GCC=aarch64-none-linux-gnu-gcc
COLLECT_LTO_WRAPPER=/opt/gcc-arm-9.2-2019.12-x86_64-aarch64-none-linux-gnu/bin/../libexec/gcc/aarch64-none-linux-gnu/9.2.1/lto-wrapper
Target: aarch64-none-linux-gnu
Configured with: /tmp/dgboter/bbs/rhev-vm2--rhe6x86_64/buildbot/rhe6x86_64--aarch64-none-linux-gnu/build/src/gcc/configure --target=aarch64-none-linux-gnu --prefix= --with-sysroot=/aarch64-none-linux-gnu/libc --with-build-sysroot=/tmp/dgboter/bbs/rhev-vm2--rhe6x86_64/buildbot/rhe6x86_64--aarch64-none-linux-gnu/build/build-aarch64-none-linux-gnu/install//aarch64-none-linux-gnu/libc --with-bugurl=https://bugs.linaro.org/ --enable-gnu-indirect-function --enable-shared --disable-libssp --disable-libmudflap --enable-checking=release --enable-languages=c,c++,fortran --with-gmp=/tmp/dgboter/bbs/rhev-vm2--rhe6x86_64/buildbot/rhe6x86_64--aarch64-none-linux-gnu/build/build-aarch64-none-linux-gnu/host-tools --with-mpfr=/tmp/dgboter/bbs/rhev-vm2--rhe6x86_64/buildbot/rhe6x86_64--aarch64-none-linux-gnu/build/build-aarch64-none-linux-gnu/host-tools --with-mpc=/tmp/dgboter/bbs/rhev-vm2--rhe6x86_64/buildbot/rhe6x86_64--aarch64-none-linux-gnu/build/build-aarch64-none-linux-gnu/host-tools --with-isl=/tmp/dgboter/bbs/rhev-vm2--rhe6x86_64/buildbot/rhe6x86_64--aarch64-none-linux-gnu/build/build-aarch64-none-linux-gnu/host-tools --enable-fix-cortex-a53-843419 --with-pkgversion='GNU Toolchain for the A-profile Architecture 9.2-2019.12 (arm-9.10)'
Thread model: posix
gcc version 9.2.1 20191025 (GNU Toolchain for the A-profile Architecture 9.2-2019.12 (arm-9.10))
三、开始编译qt源码
1.进入到qt源码,进入到下面路径(由于我是编译ARM64)
/Home/Prj/qtpack/qt-everywhrer-src-5.15.2/qtbase/mkspecs/linux-aarch64-gnu-g++
进入到linux-aarch64-gnu-g++,修改qmake.conf文件内容

修改内容如下
其中,
/opt/gcc-arm-9.2-2019.12-x86_64-aarch64-none-linux-gnu/bin/
就是设置的工具链环境变量的地址。修改完,保存即可。
#
# qmake configuration for building with aarch64-linux-gnu-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 = /opt/gcc-arm-9.2-2019.12-x86_64-aarch64-none-linux-gnu/bin/aarch64-none-linux-gnu-gcc
QMAKE_CXX = /opt/gcc-arm-9.2-2019.12-x86_64-aarch64-none-linux-gnu/bin/aarch64-none-linux-gnu-g++
QMAKE_LINK = /opt/gcc-arm-9.2-2019.12-x86_64-aarch64-none-linux-gnu/bin/aarch64-none-linux-gnu-g++
QMAKE_LINK_SHLIB = /opt/gcc-arm-9.2-2019.12-x86_64-aarch64-none-linux-gnu/bin/aarch64-none-linux-gnu-g++
# modifications to linux.conf
QMAKE_AR = /opt/gcc-arm-9.2-2019.12-x86_64-aarch64-none-linux-gnu/bin/aarch64-none-linux-gnu-ar cqs
QMAKE_OBJCOPY = /opt/gcc-arm-9.2-2019.12-x86_64-aarch64-none-linux-gnu/bin/aarch64-none-linux-gnu-objcopy
QMAKE_NM = /opt/gcc-arm-9.2-2019.12-x86_64-aarch64-none-linux-gnu/bin/aarch64-none-linux-gnu-nm -P
QMAKE_STRIP = /opt/gcc-arm-9.2-2019.12-x86_64-aarch64-none-linux-gnu/bin/aarch64-none-linux-gnu-strip
load(qt_config)
2.修改qfloat16.h文件,添加头文件引用,如果不修改,编译的时候会出现报错。
添加 #include <limits>
qt-everywhere-src-5.15.2/qtbase/src/corelib/global/qfloat16.h

3.开始配置
回到qt-everywhrer-src-5.15.2文件件中,并创建新的文件夹,用于存放编译文件。我这里创建qt_build_arm64文件夹。
进入到qt_build_arm64文件夹,打开控制台,输入如下指令。输入完毕,回车等待编译完成即可
../configure -release -opensource -confirm-license -xplatform linux-aarch64-gnu-g++ -prefix /opt/qt-5.15.2-arm64 -nomake examples -no-opengl -silent -qpa linuxfb -skip qtlocation

4.qt源码编译
编译源码
make -j$(nproc)
5.安装到指定目录
sudo make install
6.验证安装
# 检查安装目录
ls /opt/qt-5.15.2-arm64/
# 检查qmake是否可用
/opt/qt-5.15.2-arm64/bin/qmake -v
7.设置环境变量
#将以下内容添加到 ~/.bashrc 或 ~/.profile:
export QT5_ARM64_PATH=/opt/qt-5.15.2-arm64
export PATH=$QT5_ARM64_PATH/bin:$PATH
export LD_LIBRARY_PATH=$QT5_ARM64_PATH/lib:$LD_LIBRARY_PATH
export QMAKE_PATH=$QT5_ARM64_PATH/bin/qmake
#然后使配置生效:
source ~/.bashrc
四、在Qt Creator中添加ARM64的Kits
1.打开Qt Creator,进入菜单,工具->外部->配置->Kits
2.添加"编译器"
点击右边的"添加"按钮,添加编译器
名称:aarch64-none-linux-gnu-gcc-9.2
C compiler path :/opt/gcc-arm-9.2-2019.12-x86_64-aarch64-none-linux-gnu/bin/aarch64-none-linux
(通过浏览按钮,选择解压的工具链)

3.添加"Qt版本"
点击"添加",在弹出的对话框中选择编译出来的qmake路径
4.添加"构建套件Kit"
点击"添加",选择前面设置的Qt版本,编译器,应用即可。
