4 交叉编译Qt库(Qt5)

4.1 交叉编译Qt

4.1.1 嵌入式开发板环境(Ubuntu)

基础配置(以ARMv8架构为例):

# 安装基础工具链  
sudo apt install build-essential cmake git libgl1-mesa-dev  
# 验证系统版本  
lsb_release -a  # 需确保Ubuntu 22.04 LTS或更高  

性能优化

  • 启用ZRAM内存压缩:sudo systemctl enable zram-config(内存占用降低30%)

  • 禁用图形界面:sudo systemctl set-default multi-user.target(释放GPU资源)


4.1.2 PC 主机环境(Ubuntu20.04)

4.1.2.1 安装环境

依赖库安装

sudo apt install gcc-aarch64-linux-gnu g++-aarch64-linux-gnu \  
                 bison flex python3-dev libxcb-xinerama0-dev  

企业建议:通过apt-pinning锁定关键库版本(如gcc 10.2.1)

4.1.2.2 创建 sysroot 目录

三种同步方案对比

方法 适用场景 优势 企业级操作示例
直接复制 首次环境搭建 操作简单 cp -r /mnt/sdcard/lib ~/sysroot/
rsync同步 增量更新 网络带宽占用低 rsync -avz --delete root@board:/usr ~/sysroot/
NFS挂载 实时开发调试 免去重复传输 mount -t nfs 192.168.1.100:/opt /mnt/nfs

关键操作

mkdir -p ~/sysroot/{usr,lib}  
rsync -avz --rsync-path="sudo rsync" root@board:/lib/ ~/sysroot/lib/  
rsync -avz --rsync-path="sudo rsync" root@board:/usr/include ~/sysroot/usr/   

4.1.2.3 获取交叉编译器

标准化工具链配置

wget https://releases.linaro.org/10.2-2021.01/aarch64-linux-gnu/gcc-linaro-10.2.1-2021.01-x86_64_aarch64-linux-gnu.tar.xz  
tar -xvf gcc-linaro-*.tar.xz -C /opt  
export PATH="/opt/gcc-linaro-10.2.1-2021.01-x86_64_aarch64-linux-gnu/bin:$PATH"   

4.1.3 交叉编译Qt源码

编译参数优化

./configure -prefix /opt/qt5-arm \  
    -xplatform linux-arm-gnueabi-g++ \  
    -sysroot ~/sysroot \  
    -no-opengl -no-sse2 \  
    -nomake examples -nomake tests \  
    -qt-sql-sqlite -qt-zlib   
make -j$(nproc) && sudo make install  

关键参数解析

  • -sysroot:指定目标系统根目录(减少库版本冲突)

  • -no-opengl:适配无GPU设备(工业控制场景)

  • -nomake examples:缩短40%编译时间


4.1.4 PC 主机上配置交叉编译编译套件

Qt Creator配置流程

  1. 编译器绑定

    • 路径:/opt/gcc-linaro-10.2.1-2021.01-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-g++

  2. Qt版本关联

    • 指定交叉编译后的Qt路径:/opt/qt5-arm/lib/cmake/Qt5

  3. 构建套件创建

    [Kits] → 添加 → 名称: ARMv8_Qt5  
    → 设备类型: Generic Linux Device  
    → Sysroot: ~/sysroot  
    → Qt版本: Qt 5.15.8 (arm)   
    

4.1.5 交叉编译Qt程序

企业级项目配置

# myapp.pro  
QT += core gui widgets  
CONFIG += c++17 static  

DESTDIR = /opt/deploy  
TARGET = industrial_hmi  

linux-arm-gnueabi-g++ {  
    QMAKE_CC = aarch64-linux-gnu-gcc  
    QMAKE_CXX = aarch64-linux-gnu-g++  
}   

编译验证

qmake && make clean && make  
file myapp  # 应显示ELF 64-bit LSB executable, ARM aarch64   

4.1.6 板卡上运行测试

部署与监控方案

# 传输可执行文件  
scp myapp root@board:/opt/apps  
# 设置动态库路径  
export LD_LIBRARY_PATH=/opt/qt5-arm/lib:$LD_LIBRARY_PATH  
# 性能监控  
perf stat -e cycles,instructions,cache-misses ./myapp   

企业级验证标准

测试项

合格标准

检测工具

启动时间

<3s(冷启动)

time ./myapp

内存泄漏

0字节泄漏

valgrind --leak-check=full

线程安全

无死锁/竞态条件

Helgrind


企业级最佳实践

  1. 版本控制策略

    • 使用Git子模块管理Qt源码版本(推荐锁定Qt 5.15.8 LTS)

    • 通过Docker固化编译环境:

      FROM ubuntu:20.04  
      RUN apt install -y gcc-aarch64-linux-gnu \  
          && git clone https://code.qt.io/qt/qt5.git \  
          && cd qt5 \  
          && git checkout v5.15.8  
      
  2. 安全加固

    • 启用PIE(位置无关可执行文件):CONFIG += pie

    • 剥离调试符号:strip --strip-all myapp(体积缩减60%)