跨平台编译QT5.15.10实战指南
Qt 5.15.10 ARM64 交叉编译环境配置与编译指南
1. 环境配置
1.1 下载 ARM64 工具链
下载 ARM64 工具链(如gcc-arm-10.2),确保包含aarch64-none-linux-gnu-g++编译器。
链接:gcc 官网下载 版本可选,建议版本 10.2。
- 下载ARM64工具链(如gcc-arm-10.2),确保包含
aarch64-none-linux-gnu-g++编译器。链接:gcc官网下载版本可选 建议版本10.2直接下载地址:https://armkeil.blob.core.windows.net/developer/Files/downloads/gnu-a/10.2-2020.11/binrel/gcc-arm-10.2-2020.11-x86_64-aarch64-none-linux-gnu.tar.xzhttps://armkeil.blob.core.windows.net/developer/Files/downloads/gnu-a/10.2-2020.11/binrel/gcc-arm-10.2-2020.11-x86_64-aarch64-none-linux-gnu.tar.xz
1.2 主机环境
主机环境为 x86_64 Linux 系统(Ubuntu 22.04),并安装基础开发工具(如make、gcc、g++)。
可能需要安装的依赖:
sudo apt update sudo apt install -y build-essential git python3 libgl1-mesa-dev \ libxkbcommon-dev libxcb-xinerama0-dev libxcb-icccm4-dev \ libxcb-image0-dev libxcb-keysyms1-dev libxcb-render-util0-dev \ libxcb-xkb-dev libxkbcommon-x11-dev flex bison gperf \ libssl-dev ninja-build ruby perl python3-pip \ libfontconfig1-dev libfreetype6-dev libx11-dev \ libxext-dev libxfixes-dev libxi-dev libxrender-dev \ libxcb1-dev libx11-xcb-dev libxcb-glx0-dev1.3 解压工具链
解压 GCC 工具链到你的存储路径;我的路径为:
she@she-virtual-machine:~/arm-toolchain/gcc-arm-10.2$ pwd /home/she/arm-toolchain/gcc-arm-10.21.4 获取 Qt 源码
从QT官方存档下载qt-everywhere-src-5.15.10.tar.xz。或者我的上传:
解压缩源码到你的存储路径,我的路径为桌面下:
~/Desktop/qt-everywhere-opensource-src-5.15.10/qt-everywhere-src-5.15.10$ pwd /home/she/Desktop/qt-everywhere-opensource-src-5.15.10/qt-everywhere-src-5.15.101.5 设置环境变量
export SYSROOT="/path/to/gcc-arm-10.2/aarch64-none-linux-gnu/libc" export LDFLAGS="-Wl,-rpath-link=$SYSROOT/lib -Wl,-rpath-link=$SYSROOT/usr/lib" export CC="gcc" export CXX="g++"我的路径和指令为:
export SYSROOT="/home/she/arm-toolchain/gcc-arm-10.2/aarch64-none-linux-gnu/libc" export LDFLAGS="-Wl,-rpath-link=$SYSROOT/lib -Wl,-rpath-link=$SYSROOT/usr/lib" export CC="gcc" export CXX="g++"2. 编译配置
2.1 修改 qmake.conf
编辑文件qtbase/mkspecs/linux-aarch64-gnu-g++/qmake.conf,指定交叉编译工具链路径。
文件地址:
/home/she/Desktop/qt-everywhere-opensource-src-5.15.10/qt-everywhere-src-5.15.10/qtbase/mkspecs/linux-aarch64-gnu-g++内容改为:
# # qmake configuration for building with aarch64-none-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 = aarch64-none-linux-gnu-gcc QMAKE_CXX = aarch64-none-linux-gnu-g++ QMAKE_LINK = aarch64-none-linux-gnu-g++ QMAKE_LINK_SHLIB = aarch64-none-linux-gnu-g++ # modifications to linux.conf QMAKE_AR = aarch64-none-linux-gnu-ar cqs QMAKE_OBJCOPY = aarch64-none-linux-gnu-objcopy QMAKE_NM = aarch64-none-linux-gnu-nm -P QMAKE_STRIP = aarch64-none-linux-gnu-strip load(qt_config)2.2 创建构建目录并生成 Makefile
在源码源文件目录下生成一个build文件夹:
mkdir build-qt5.15.10-arm64 cd build-qt5.15.10-arm64然后使用以下命令生成 Makefile:
she@she-virtual-machine:~/Desktop/qt-everywhere-opensource-src-5.15.10/build-qt5.15.10-arm64$ ../qt-everywhere-src-5.15.10/configure \ -prefix /opt/qt5.15.10-arm64 \ -sysroot /home/she/arm-toolchain/gcc-arm-10.2/aarch64-none-linux-gnu/libc \ -xplatform linux-aarch64-gnu-g++ \ -platform linux-g++-64 \ -opensource -confirm-license \ -release \ -c++std c++14 \ -qt-zlib \ -qt-libpng \ -qt-libjpeg \ -no-openssl \ -nomake examples \ -nomake tests \ -no-pch \ -no-opengl \ -skip qtwayland \ -skip qtwebengine3. 编译与安装
3.1 编译
运行make -j$(nproc)启用多线程编译。
若出现依赖错误,检查$SYSROOT中是否缺失库文件(如libz.so)。
3.2 安装
执行make install,生成的文件将位于sysroot:/opt/qt5.15.10-arm64。
4. 验证与调试
验证
sysroot/opt/qt5.15.10-arm64/bin/qmake是否能正确生成 ARM64 目标平台的 Makefile。注意:这里的
qmake是 x86 文件,用于在 x86 上生成 Makefile,使用这个 Makefile 去交叉编译出 ARM64 的程序。库路径错误:通过
LD_LIBRARY_PATH显式指定$SYSROOT/usr/lib。头文件缺失:检查
configure输出是否提示缺失依赖(如 OpenSSL)。
5. 附件
编译完成,安装好的gcc工具链:gcc-10.2-ARM64-QT5.15.10
目录结构
tree -L 3 /home/she/arm-toolchain/gcc-arm-10.2/aarch64-none-linux-gnu/libc/ /home/she/arm-toolchain/gcc-arm-10.2/aarch64-none-linux-gnu/libc/ ├── opt │ ├── qt5.15.10-arm64 │ │ ├── bin │ │ ├── doc │ │ ├── include │ │ ├── lib │ │ ├── mkspecs │ │ ├── plugins │ │ ├── qml │ │ └── translations │ └── qt5.15.10-arm64-minimal │ ├── bin │ ├── doc │ ├── include │ ├── lib │ ├── mkspecs │ └── plugins