ARM64跨平台开发实战:Ubuntu 20.04下Qt 5.12.8交叉编译环境深度配置指南
当我们需要将x86平台开发的Qt应用程序移植到国产ARM64架构设备时,交叉编译环境的搭建往往成为第一道技术门槛。本文将手把手带你完成从工具链配置到Qt源码编译的全过程,特别针对国产麒麟系统等ARM64平台提供可落地的解决方案。
1. 环境准备与工具链部署
1.1 系统基础环境检查
在开始之前,建议先确认开发机的系统架构和版本信息。打开终端执行以下命令:
# 查看系统架构 uname -m # 查看系统版本 lsb_release -a # 查看CPU信息 lscpu对于Ubuntu 20.04 x86_64系统,你应当看到类似这样的输出:
x86_64 Distributor ID: Ubuntu Description: Ubuntu 20.04.3 LTS Release: 20.04 Codename: focal1.2 ARM64交叉编译器安装
我们推荐使用gcc-arm-8.3版本工具链,这是经过验证与Qt 5.12.8兼容性较好的版本。以下是具体安装步骤:
下载工具链:
wget https://developer.arm.com/-/media/Files/downloads/gnu-a/8.3-2019.03/binrel/gcc-arm-8.3-2019.03-x86_64-aarch64-linux-gnu.tar.xz解压并安装:
tar -xvf gcc-arm-8.3-2019.03-x86_64-aarch64-linux-gnu.tar.xz sudo mv gcc-arm-8.3-2019.03-x86_64-aarch64-linux-gnu /opt配置环境变量: 编辑
~/.bashrc文件,在末尾添加:export PATH=$PATH:/opt/gcc-arm-8.3-2019.03-x86_64-aarch64-linux-gnu/bin然后执行:
source ~/.bashrc验证安装:
aarch64-linux-gnu-gcc -v正确安装后会显示版本信息,包含"gcc version 8.3.0"等字样。
注意:如果遇到权限问题,建议使用sudo命令执行相关操作。同时确保系统已安装基础编译工具:
sudo apt install build-essential cmake
2. Qt源码编译配置
2.1 获取Qt 5.12.8源码
从Qt官方镜像下载源码包:
wget https://download.qt.io/archive/qt/5.12/5.12.8/single/qt-everywhere-src-5.12.8.tar.xz解压源码:
tar -xvf qt-everywhere-src-5.12.8.tar.xz2.2 配置编译环境
创建编译目录和安装目录:
mkdir qt5-build qt5-arm64修改关键配置文件qtbase/mkspecs/linux-aarch64-gnu-g++/qmake.conf,确保包含以下内容:
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-linux-gnu-gcc QMAKE_CXX = aarch64-linux-gnu-g++ QMAKE_LINK = aarch64-linux-gnu-g++ QMAKE_LINK_SHLIB = aarch64-linux-gnu-g++ # modifications to linux.conf QMAKE_AR = aarch64-linux-gnu-ar cqs QMAKE_OBJCOPY = aarch64-linux-gnu-objcopy QMAKE_NM = aarch64-linux-gnu-nm -P QMAKE_STRIP = aarch64-linux-gnu-strip2.3 编译配置脚本
创建configure.sh脚本:
#!/bin/bash ../qt-everywhere-src-5.12.8/configure \ -prefix $(pwd)/qt5-arm64 \ -confirm-license \ -opensource \ -make libs \ -xplatform linux-aarch64-gnu-g++ \ -no-opengl \ -skip qtdeclarative \ -nomake examples \ -nomake tests给脚本执行权限并运行:
chmod +x configure.sh ./configure.sh3. Qt源码编译与安装
3.1 并行编译优化
使用多核编译加速过程:
make -j$(nproc) 2>&1 | tee build.log编译完成后安装:
make install3.2 验证编译结果
检查生成的库文件架构:
readelf -h qt5-arm64/lib/libQt5Core.so.5应显示"Machine: AArch64"。
4. Qt Creator环境配置
4.1 编译器配置
在Qt Creator中:
- 进入"工具"→"选项"→"Kits"
- 添加C++编译器,路径指向:
/opt/gcc-arm-8.3-2019.03-x86_64-aarch64-linux-gnu/bin/aarch64-linux-gnu-g++
4.2 Qt版本配置
- 添加新Qt版本,qmake路径选择:
/path/to/qt5-arm64/bin/qmake
4.3 构建套件配置
创建新Kit,选择:
- 设备类型:通用Linux设备
- 编译器:刚配置的ARM64交叉编译器
- Qt版本:刚配置的Qt 5.12.8 ARM64版本
5. 常见问题解决方案
5.1 编译过程中出现的典型错误
找不到交叉编译器:
aarch64-linux-gnu-g++: not found解决方案:
- 检查PATH环境变量是否包含工具链bin目录
- 确认qmake.conf中编译器路径是否正确
链接库缺失:
cannot find -lGL解决方案:
- 安装ARM64架构的库文件:
sudo apt install libgl1-mesa-dev:arm64
- 安装ARM64架构的库文件:
5.2 性能优化建议
- 使用
-j$(nproc)参数充分利用多核CPU - 配置ccache加速后续编译:
sudo apt install ccache export CCACHE_DIR="/path/to/ccache" export CC="ccache gcc" export CXX="ccache g++"
6. 项目移植与验证
6.1 创建测试项目
在Qt Creator中使用新配置的Kit创建简单Qt Widgets项目,构建后检查生成的可执行文件:
file your_project应显示"ELF 64-bit LSB shared object, ARM aarch64"。
6.2 部署到目标设备
将编译好的可执行文件和依赖库拷贝到ARM64设备:
scp your_project user@arm-device:/path/to/deploy在目标设备上运行前,确保已安装必要的运行时库:
sudo apt install libqt5core5a libqt5gui5 libqt5widgets57. 高级配置技巧
7.1 静态编译选项
如需生成静态链接的可执行文件,在configure时添加:
-static -no-pch7.2 自定义模块选择
通过以下参数控制编译模块:
-skip qtwebengine -skip qtmultimedia7.3 交叉编译调试支持
配置gdb调试工具:
sudo apt install gdb-multiarch在Qt Creator中配置调试器路径为/usr/bin/gdb-multiarch。
经过以上步骤,你应该已经成功搭建了完整的ARM64交叉编译环境。在实际项目开发中,建议将编译配置脚本纳入版本控制系统,方便团队共享和持续集成。