交叉编译 Qt 5.15.2
1. 下载
交叉编译器下载地址目录:aarch64-linux-gnu
- gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnus
- sysroot-glibc-linaro-2.25-2019.12-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.h
,include
添加:
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
- 编译 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
- 资料
本文由作者按照 CC BY 4.0 进行授权