文章

交叉编译 Qt 5.15.2

1. 下载

交叉编译器下载地址目录:aarch64-linux-gnu

下载之后,将编译器及sysroot解压到/opt目录下:

1
2
/opt/gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu
/opt/sysroot-glibc-linaro-2.25-2019.12-aarch64-linux-gnu

Qt 5.15.2下载目录:Qt 5.15.2 。选择下载 qt-everywhere-src-5.15.2.tar.xz

2. 修改Qt源码

修改头文件:qtbase/src/corelib/global/qglobal.hinclude添加:

1
2
3
// 第44行开始的地方添加 <limits>,解决configure的时候报错找不到<limits>以及limits相关错误
#  include <limits>
// ....

拷贝(不拷贝,configure 的时候报错:Invalid target platform ‘aarch64-linux-gnu-g++’):

1
cp -r qtbase/mkspecs/linux-aarch64-gnu-g++ qtbase/mkspecs/aarch64-linux-gnu-g++

修改文件qtbase/mkspecs/aarch64-linux-gnu-g++/qmake.conf

1
2
3
4
5
6
7
8
9
10
11
# modifications to g++.conf
QMAKE_CC                = /opt/gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-gcc
QMAKE_CXX               = /opt/gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-g++
QMAKE_LINK              = /opt/gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-g++
QMAKE_LINK_SHLIB        = /opt/gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-g++

# modifications to linux.conf
QMAKE_AR                = /opt/gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-ar cqs
QMAKE_OBJCOPY           = /opt/gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-objcopy
QMAKE_NM                = /opt/gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-nm -P
QMAKE_STRIP             = /opt/gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-strip
  1. 编译 Qt 源码

如下为编译一个比较精简的Qt库,去掉了很多模块。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#!/bin/sh

cd build-qt5-qtbase
yes | rm -rf *

export SYSROOT=/opt/sysroot-glibc-linaro-2.25-2019.12-aarch64-linux-gnu
export CROSS_PREFIX=aarch64-linux-gnu-
export DEST_PREFIX=/opt/qt5-aarch64-gcc-linaro-7.5.0
export TOOLCHAIN_PREFIX=/opt/gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu/bin
export PATH=$TOOLCHAIN_PREFIX:$PATH
export PKG_CONFIG_LIBDIR=${SYSROOT}/lib/pkgconfig:${SYSROOT}/share/pkgconfig
export PKG_CONFIG_PATH=${SYSROOT}/lib/pkgconfig:${SYSROOT}/share/pkgconfig

../configure -pkg-config -xplatform aarch64-linux-gnu-g++ -prefix $DEST_PREFIX -release -opensource -confirm-license -sysroot $SYSROOT -nomake tests -nomake examples -skip qtwebengine -skip qt3d -skip qtwebview -skip qtnetworkauth -skip qtserialport -skip qtsensors -skip qtmultimedia -skip qtdoc -skip qtmacextras -skip qtandroidextras -no-opengl

# 添加skip qtlocation,qtlocation编译报错
../configure -pkg-config -xplatform aarch64-linux-gnu-g++ -prefix $DEST_PREFIX -release -opensource -confirm-license -sysroot $SYSROOT -nomake tests -nomake examples -skip qtwebengine -skip qt3d -skip qtwebview -skip qtnetworkauth -skip qtserialport -skip qtsensors -skip qtmultimedia -skip qtdoc -skip qtmacextras -skip qtandroidextras -skip qtlocation -no-opengl

# 去掉几乎所有界面相关模块
../configure -pkg-config -xplatform aarch64-linux-gnu-g++ -prefix $DEST_PREFIX -release -opensource -confirm-license -sysroot $SYSROOT -nomake tests -nomake examples -skip qtwebengine -skip qt3d -skip qtwebview -skip qtnetworkauth -skip qtserialport -skip qtsensors -skip qtmultimedia -skip qtdoc -skip qtmacextras -skip qtandroidextras -skip qtlocation -no-gui -skip qtdeclarative -skip qtquickcontrols -skip qtquickcontrols2 -skip qtgraphicaleffects -no-opengl

make -j8
sudo make install
  1. 资料
本文由作者按照 CC BY 4.0 进行授权