当前位置: 首页 > news >正文

在Ubuntu 20.04上为ARM开发板交叉编译Qt 5.14.2(含QtWebEngine完整依赖清单)

在Ubuntu 20.04上为ARM开发板交叉编译Qt 5.14.2(含QtWebEngine完整依赖清单)

为嵌入式ARM设备构建Qt开发环境是许多工业控制和智能设备开发者的必经之路。不同于桌面应用的直接部署,嵌入式开发需要解决交叉编译工具链配置、依赖库兼容性、硬件加速支持等一系列独特挑战。本文将手把手带你完成从Ubuntu主机环境准备到生成ARM架构Qt SDK的全过程,特别针对QtWebEngine这一依赖复杂的模块提供经过验证的解决方案。

1. 环境准备与源码获取

在开始编译之前,我们需要确保主机系统具备完整的开发工具链和基础依赖库。Ubuntu 20.04作为长期支持版本,其软件仓库中的工具版本与Qt 5.14.2有较好的兼容性。

首先安装基础编译工具:

sudo apt update sudo apt install build-essential git python libgl1-mesa-dev

获取Qt源码有两种推荐方式:

  1. 从官方镜像下载完整源码包:
wget https://download.qt.io/new_archive/qt/5.14/5.14.2/single/qt-everywhere-src-5.14.2.tar.xz
  1. 使用Git仓库获取(便于后续补丁管理):
git clone git://code.qt.io/qt/qt5.git cd qt5 git checkout v5.14.2 perl init-repository --module-subset=default,-qt3d,-qtactiveqt

解压源码包建议放在/opt目录下,便于多用户共享:

sudo tar -xvf qt-everywhere-src-5.14.2.tar.xz -C /opt/ sudo chown -R $USER:$USER /opt/qt-everywhere-src-5.14.2

2. 交叉编译工具链配置

针对不同ARM架构的开发板,需要准备对应的工具链。以下是常见开发板的工具链选择:

开发板类型推荐工具链安装方法
树莓派3/4gcc-arm-linux-gnueabihfsudo apt install g++-arm-linux-gnueabihf
RK3399aarch64-linux-gnu-gccsudo apt install g++-aarch64-linux-gnu
i.MX6/8官方提供的fsl-linaro-toolchain需从NXP官网下载

配置工具链环境变量示例(以aarch64为例):

export TOOLCHAIN_PATH=/usr/bin export CROSS_COMPILE=aarch64-linux-gnu- export CC=${CROSS_COMPILE}gcc export CXX=${CROSS_COMPILE}g++ export AR=${CROSS_COMPILE}ar export LD=${CROSS_COMPILE}ld

3. QtWebEngine完整依赖解决方案

QtWebEngine作为整合Chromium的模块,其依赖关系极为复杂。经过多次实践验证,以下是在Ubuntu 20.04上必须安装的依赖库清单:

核心图形库依赖:

sudo apt install libxcomposite-dev libxcursor-dev libxi-dev \ libxrandr-dev libxtst-dev libxss-dev libxkbcommon-dev \ libdrm-dev libgbm-dev libglu1-mesa-dev

多媒体支持组件:

sudo apt install libpulse-dev libasound2-dev libgstreamer1.0-dev \ libgstreamer-plugins-base1.0-dev gstreamer1.0-plugins-good \ gstreamer1.0-plugins-bad

系统服务相关依赖:

sudo apt install libdbus-1-dev libcap-dev libpci-dev libudev-dev \ libnss3-dev libfontconfig1-dev libicu-dev libxslt-dev \ libevent-dev libsystemd-dev

特别容易遗漏的工具链:

sudo apt install bison flex gperf ninja-build nodejs

验证nodejs版本(要求≥8.0):

node --version npm --version

4. 配置参数详解与优化

创建自动配置脚本configure-qt.sh,以下是最关键的参数解析:

基础编译选项:

#!/bin/bash ./configure \ -prefix /opt/qt5.14.2-arm \ -extprefix /opt/qt5.14.2-arm-sdk \ -hostprefix /opt/qt5.14.2-arm-tools \ -opensource \ -confirm-license \ -release \ -c++std c++11 \ -shared \ -optimized-qmake

模块裁剪策略(根据嵌入式需求):

-skip qt3d \ -skip qtactiveqt \ -skip qtandroidextras \ -skip qtwebglplugin \ -skip qtgamepad \ -nomake examples \ -nomake tests

图形后端选择(根据目标板GPU支持情况):

-no-opengl \ -linuxfb \ -eglfs \ -qpa xcb

第三方库集成方式:

-qt-zlib \ -qt-libpng \ -qt-libjpeg \ -qt-freetype \ -qt-harfbuzz \ -qt-pcre \ -no-openssl \ -system-sqlite

交叉编译关键参数:

-xplatform linux-aarch64-gnu-g++ \ -sysroot /opt/sysroot \ -device-option CROSS_COMPILE=aarch64-linux-gnu-

执行配置脚本并开始编译:

chmod +x configure-qt.sh ./configure-qt.sh 2>&1 | tee configure.log make -j$(nproc) 2>&1 | tee build.log sudo make install

5. 常见问题排查指南

问题1:gperf未找到错误

sudo apt install gperf export PATH=$PATH:/usr/local/bin

问题2:GL/gl.h缺失

sudo apt install libgl1-mesa-dev libglu1-mesa-dev

问题3:WebEngine编译卡在nodejs步骤

# 检查nodejs版本 node --version # 若版本低于8.x,需手动升级 curl -sL https://deb.nodesource.com/setup_12.x | sudo -E bash - sudo apt install nodejs

问题4:内存不足导致编译失败

# 限制并行编译任务数 make -j4 # 或创建交换空间 sudo fallocate -l 4G /swapfile sudo chmod 600 /swapfile sudo mkswap /swapfile sudo swapon /swapfile

编译完成后验证生成的文件架构:

file /opt/qt5.14.2-arm/bin/qmake # 应显示"ELF 64-bit LSB executable, ARM aarch64"

6. 目标板部署与验证

将编译好的SDK打包传输到开发板:

tar -czvf qt5.14.2-arm-sdk.tar.gz /opt/qt5.14.2-arm-sdk scp qt5.14.2-arm-sdk.tar.gz pi@192.168.1.100:/home/pi

在开发板上配置环境变量:

export QT_ROOT=/home/pi/qt5.14.2-arm-sdk export PATH=$QT_ROOT/bin:$PATH export LD_LIBRARY_PATH=$QT_ROOT/lib:$LD_LIBRARY_PATH

创建简单的测试程序验证功能:

// test_webengine.cpp #include <QApplication> #include <QWebEngineView> int main(int argc, char *argv[]) { QApplication app(argc, argv); QWebEngineView view; view.load(QUrl("https://www.qt.io")); view.show(); return app.exec(); }

编译测试程序:

qmake -project qmake make

在实际项目中,建议使用sysroot方法管理目标板依赖库,保持开发环境与运行环境的一致性。将开发板的/lib和/usr/lib目录复制到主机的sysroot目录,配置qmake时通过-sysroot参数指定路径。

http://www.jsqmd.com/news/772583/

相关文章:

  • 告别虚拟机!在Win10上原生安装ROS Melodic/Foxy的保姆级避坑指南(含VS2022适配)
  • 百度网盘秒传脚本三步部署与零基础使用指南
  • 六自由度机械臂避障路径与轨迹规划【附代码】
  • Cellpose-SAM:超越通用细胞分割的视觉Transformer架构深度解析
  • 手把手教你用MATLAB Profile Generator为AD9371生成myk.c配置文件(Zynq平台实战)
  • ESP32-E22与ESP32-H21芯片解析与物联网应用指南
  • 多功能冲剪机厂家推荐天马机械厂——多功能冲剪机厂家怎么选? - 好物推荐官
  • 3个步骤掌握Windhawk:免费开源的Windows程序定制工具完全指南
  • 拆解紫光展锐ROM:从prodnv到userdata,每个img/bin文件到底存了啥?
  • 除了.cpu(),还有哪些方法能把PyTorch CUDA Tensor数据弄到CPU上处理?(附性能对比)
  • GPT4Free开源项目解析:聚合AI接口的技术实现与实战指南
  • 小米手表表盘制作神器Mi-Create:零基础打造个性化表盘
  • 不用微调!用LangChain+ChatGLM-6B搭建垂直领域问答系统(附避坑指南)
  • 给程序员讲线性代数:用NumPy和几何动画理解基底与线性变换
  • Chrome浏览器Markdown阅读革命:如何用markdownReader插件解决本地文档阅读四大痛点
  • 保姆级教程:手把手在Gazebo仿真中调试PX4悬停油门参数
  • Godot4.2实战:用textureDB函数库为你的游戏动态生成程序化纹理(棋盘格、色块、边框)
  • 01-全新的Arch体验
  • AISMM模型落地实战:3个真实案例拆解如何72小时内完成高风险系统技术选型
  • Xunxiashi:从聊天到高效执行,打造OpenClaw智能体的渐进式养成方案
  • 别再手动算了!用FPGA实现二进制转BCD码的‘加3移位法’保姆级教程(附Verilog代码)
  • 记忆强化:让AI学会自我迭代,AI深度开发
  • 基于AI Agent与兴趣图谱的个性化简报系统OpenEir实战指南
  • 基于物联网的智能水培温室控制系统粒子群算法【附代码】
  • cocos使用fgui
  • 怎样高效使用SALib:5个实用技巧完全解析
  • AI助手+静态模板:高效构建可控营销落地页的工程实践
  • 别再用Excel硬扛了!SPSS数据清洗与预处理保姆级教程(附实战数据集)
  • C语言中,单独写1,默认类型是int
  • ChanlunX缠论算法实现:量化交易中的技术分析架构设计