交叉编译 Qt 5.15.2

1. 下载

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

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

/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添加:

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

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

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

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

# 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

3. 编译 Qt 源码

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

#!/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

# 去掉几乎所有界面相关模块,只保留QtGui,QtWidget界面组件
# ../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 -skip qtdeclarative -skip qtquickcontrols -skip qtquickcontrols2 -skip qtgraphicaleffects -no-opengl

make -j8
sudo make install

4. 资料




    Enjoy Reading This Article?

    Here are some more articles you might like to read next:

  • al-folio 本地部署记录(Ubuntu 24.04)
  • C++ Traits
  • 道格拉斯-普克算法(Douglas–Peucker algorithm)
  • CMake支持库收集
  • QGC代码架构解析:飞行前检查(起飞条件)