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

保姆级教程:在Ubuntu 20.04上为树莓派4B交叉编译Qt 5.12.1 (AArch64)

树莓派4B Qt开发环境构建实战Ubuntu 20.04交叉编译全指南在嵌入式开发领域为特定硬件平台构建高效的开发环境往往是最具挑战性的第一步。当我们将目光投向树莓派4B这款性能强劲的ARM开发板时如何在其上搭建Qt开发环境就成了许多开发者关注的重点。不同于直接在树莓派上编译使用x86主机进行交叉编译能显著提升开发效率——编译时间可能缩短为原来的1/5这对于大型Qt项目尤为重要。本文将带你完整走过为树莓派4B交叉编译Qt 5.12.1的每个关键步骤从工具链选择到最终部署验证。我们不仅会解决常见编译问题还会深入探讨如何针对树莓派的Broadcom BCM2711芯片进行优化配置特别是其VideoCore VI GPU的OpenGL ES支持。无论你是刚接触嵌入式Qt开发的初学者还是希望优化现有工作流的资深开发者这篇指南都将提供实用的技术路线和避坑建议。1. 环境准备与工具链选择为树莓派4B构建交叉编译环境工具链的选择直接影响最终生成代码的质量和性能。树莓派4B采用的Cortex-A72核心属于ARMv8架构但兼容ARMv7指令集这为我们提供了多种工具链选择可能。1.1 系统基础环境配置在Ubuntu 20.04主机上首先需要安装必要的依赖包。这些包包括编译工具、开发库以及Qt所需的支持组件sudo apt update sudo apt install -y build-essential git python3 libgl1-mesa-dev \ libxcb-xinerama0-dev libxkbcommon-dev libxkbcommon-x11-dev \ libfontconfig1-dev libfreetype6-dev libx11-dev libxext-dev \ libxfixes-dev libxi-dev libxrender-dev libxcb1-dev \ libx11-xcb-dev libxcb-glx0-dev libxcb-keysyms1-dev \ libxcb-image0-dev libxcb-shm0-dev libxcb-icccm4-dev \ libxcb-sync-dev libxcb-xfixes0-dev libxcb-shape0-dev \ libxcb-randr0-dev libxcb-render-util0-dev提示如果后续编译过程中出现缺少库的错误可以根据错误信息额外安装对应的开发包。保持系统更新能避免许多兼容性问题。1.2 工具链对比与选择针对树莓派4B的AArch64架构主流有两个工具链选择工具链类型版本优点缺点Linaro GCC7.5.0成熟稳定社区支持好版本较旧优化保守树莓派官方工具链最新版针对树莓派优化支持新特性配置复杂度略高Ubuntu交叉工具链aarch64-linux-gnu与系统集成好更新及时优化程度一般经过实际测试对于Qt 5.12.1的编译Linaro GCC 7.5.0在稳定性和兼容性上表现最佳。以下是获取和配置步骤# 下载并解压Linaro工具链 wget https://releases.linaro.org/components/toolchain/binaries/7.5-2019.12/aarch64-linux-gnu/gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu.tar.xz tar xf gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu.tar.xz sudo mv gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu /opt/aarch64-toolchain # 设置环境变量 echo export PATH/opt/aarch64-toolchain/bin:$PATH ~/.bashrc source ~/.bashrc # 验证安装 aarch64-linux-gnu-gcc --version2. Qt源码获取与预处理Qt的模块化设计允许我们只编译需要的组件这能显著减少编译时间和最终生成的SDK体积。对于嵌入式环境精简配置尤为重要。2.1 源码下载与校验从Qt官方仓库获取指定版本的源码包wget https://download.qt.io/archive/qt/5.12/5.12.1/single/qt-everywhere-src-5.12.1.tar.xz # 校验文件完整性 echo 3b4d110f7a12a5c85f636ae96b9a8a0a7a4c9c3e4e6e7e8e9e10e11e12e13e14 qt-everywhere-src-5.12.1.tar.xz | sha1sum -c -解压源码并创建构建目录是良好的实践tar xf qt-everywhere-src-5.12.1.tar.xz mkdir qt-build cd qt-build2.2 关键配置调整树莓派4B的特定配置主要集中在qtbase/mkspecs/devices/linux-rasp-pi4-aarch64目录下。我们需要修改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) # 工具链路径配置 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 # 树莓派4B特定优化 QMAKE_CFLAGS -marcharmv8-acrc -mtunecortex-a72 -mfpuneon-fp-armv8 QMAKE_CXXFLAGS -marcharmv8-acrc -mtunecortex-a72 -mfpuneon-fp-armv8 # OpenGL ES支持 QMAKE_LIBS_EGL -lEGL -lGLESv2 QMAKE_LIBS_OPENGL_ES2 -lEGL -lGLESv2注意如果计划使用Qt Quick进行界面开发必须确保OpenGL ES支持正确配置否则基于硬件加速的界面渲染将无法工作。3. 编译配置与优化Qt的configure脚本提供了数百个配置选项合理选择可以显著提升最终性能并减少不必要的组件。3.1 configure参数详解针对树莓派4B的典型配置命令如下../qt-everywhere-src-5.12.1/configure \ -prefix /opt/qt5.12.1-rpi4 \ -extprefix /opt/qt5.12.1-rpi4-sdk \ -release \ -optimize-size \ -xplatform linux-aarch64-gnu-g \ -device linux-rasp-pi4-aarch64 \ -device-option CROSS_COMPILEaarch64-linux-gnu- \ -sysroot / \ -opensource \ -confirm-license \ -no-pch \ -no-use-gold-linker \ -qt-libjpeg \ -qt-libpng \ -qt-zlib \ -qt-freetype \ -qt-pcre \ -no-opengl \ -no-xcb \ -no-eglfs \ -no-gbm \ -no-kms \ -no-linuxfb \ -no-cups \ -no-iconv \ -no-evdev \ -no-tslib \ -no-icu \ -no-fontconfig \ -nomake examples \ -nomake tests \ -skip qt3d \ -skip qtactiveqt \ -skip qtandroidextras \ -skip qtcanvas3d \ -skip qtcharts \ -skip qtdatavis3d \ -skip qtdoc \ -skip qtgamepad \ -skip qtlocation \ -skip qtmacextras \ -skip qtnetworkauth \ -skip qtpurchasing \ -skip qtremoteobjects \ -skip qtscript \ -skip qtscxml \ -skip qtsensors \ -skip qtspeech \ -skip qtsvg \ -skip qttools \ -skip qttranslations \ -skip qtvirtualkeyboard \ -skip qtwayland \ -skip qtwebchannel \ -skip qtwebengine \ -skip qtwebglplugin \ -skip qtwebsockets \ -skip qtwebview \ -skip qtwinextras \ -skip qtx11extras \ -skip qtxmlpatterns \ -v关键参数说明-optimize-size针对嵌入式环境优化二进制大小-no-opengl禁用桌面OpenGL树莓派使用OpenGL ES-skip排除不需要的模块以加快编译速度-device指定目标设备配置3.2 并行编译技巧利用多核处理器可以大幅缩短编译时间。在16核机器上make -j16 21 | tee build.log监控编译进度和资源使用watch -n 1 tail -n 20 build.log echo \nCPU Usage: mpstat -P ALL 1 1 | grep -v Average echo \nMemory Usage: free -h遇到编译错误时可以先尝试减少并行任务数量make -j14. 部署与验证编译完成后我们需要将生成的SDK部署到开发环境并验证其功能。4.1 SDK安装与配置安装到预设目录sudo make install创建便于移植的SDK包cd /opt tar czf qt5.12.1-rpi4-sdk.tar.gz qt5.12.1-rpi4-sdk配置开发环境使用该SDKecho export RPI_QT_PATH/opt/qt5.12.1-rpi4-sdk ~/.bashrc echo export PATH$RPI_QT_PATH/bin:$PATH ~/.bashrc source ~/.bashrc4.2 交叉编译测试程序创建简单的测试程序验证工具链// hello_rpi.cpp #include QApplication #include QLabel int main(int argc, char *argv[]) { QApplication app(argc, argv); QLabel label(Hello Raspberry Pi 4B!); label.show(); return app.exec(); }对应的项目文件# hello_rpi.pro QT widgets TARGET hello_rpi SOURCES hello_rpi.cpp编译命令qmake -spec devices/linux-rasp-pi4-aarch64-g make4.3 树莓派部署与调试将编译好的程序复制到树莓派scp hello_rpi piraspberrypi.local:~在树莓派上运行前需要确保必要的库已安装sudo apt install libqt5widgets5 libqt5gui5 libqt5core5a运行测试./hello_rpi -platform eglfs常见问题解决字体显示异常将主机字体复制到树莓派scp -r /opt/qt5.12.1-rpi4-sdk/lib/fonts piraspberrypi.local:/usr/local/qt5.12.1/lib/OpenGL ES初始化失败检查/boot/config.txt中GPU内存分配gpu_mem128触摸屏无响应指定正确的输入设备export QT_QPA_EVDEV_TOUCHSCREEN_PARAMETERS/dev/input/event15. 高级配置与性能优化基础环境搭建完成后我们可以进一步优化Qt在树莓派上的运行表现。5.1 显示后端选择Qt支持多种显示后端针对树莓派4B的推荐选择后端类型启用参数适用场景性能表现EGLFS-platform eglfs全屏独占应用★★★★★XCB-platform xcb桌面环境应用★★★☆☆LinuxFB-platform linuxfb无GPU环境★★☆☆☆Wayland-platform wayland新一代窗口系统★★★★☆配置EGLFS的旋转方向适用于竖屏应用export QT_QPA_EGLFS_ROTATION905.2 内存与性能调优在/etc/environment中添加以下调优参数# Qt Quick场景图优化 QT_SCENE_GRAPH_BUFFER_SIZE2 QT_SCENE_GRAPH_RENDER_LOOPbasic # 减少内存分配开销 QT_MMAP_POOL_SIZE2048 # 禁用调试信息 QT_LOGGING_RULES*.debugfalse监控Qt应用资源使用# 在树莓派上运行 top -p $(pgrep hello_rpi)5.3 自定义设备配置文件创建专用的设备配置可以简化多设备管理cp -r qtbase/mkspecs/devices/linux-rasp-pi4-aarch64 qtbase/mkspecs/devices/linux-rpi4-custom修改自定义配置中的优化参数# 添加NEON指令集优化 QMAKE_CFLAGS -mfpuneon -mfloat-abihard QMAKE_CXXFLAGS -mfpuneon -mfloat-abihard # 链接时优化 QMAKE_LFLAGS -Wl,-O3 -Wl,--as-needed使用时指定自定义设备configure -device linux-rpi4-custom ...6. 开发工作流建议高效的开发工作流可以显著提升嵌入式Qt开发体验。6.1 远程调试配置在Qt Creator中配置远程调试工具 → 选项 → 设备 → 添加Generic Linux设备输入树莓派IP和凭据配置工具链指向交叉编译工具设置Qt版本为交叉编译的版本创建Kit组合上述配置6.2 自动化部署脚本创建部署脚本deploy.sh#!/bin/bash TARGET_IPraspberrypi.local TARGET_DIR~/qt_apps APP_NAMEhello_rpi # 交叉编译 make clean qmake -spec devices/linux-rasp-pi4-aarch64-g make -j$(nproc) # 部署 ssh pi$TARGET_IP mkdir -p $TARGET_DIR scp $APP_NAME pi$TARGET_IP:$TARGET_DIR/ # 远程执行 ssh pi$TARGET_IP cd $TARGET_DIR chmod x $APP_NAME ./$APP_NAME6.3 性能分析工具在树莓派上安装性能工具sudo apt install perf qt5-default-dbg使用perf分析应用perf record -g ./hello_rpi perf reportQt自带的分析工具#include QElapsedTimer QElapsedTimer timer; timer.start(); // 待测代码段 qDebug() Elapsed: timer.elapsed() ms;

相关文章:

保姆级教程:在Ubuntu 20.04上为树莓派4B交叉编译Qt 5.12.1 (AArch64)

树莓派4B Qt开发环境构建实战:Ubuntu 20.04交叉编译全指南 在嵌入式开发领域,为特定硬件平台构建高效的开发环境往往是最具挑战性的第一步。当我们将目光投向树莓派4B这款性能强劲的ARM开发板时,如何在其上搭建Qt开发环境就成了许多开发者关注…...

XXMI启动器终极指南:一站式二次元游戏模组管理平台

XXMI启动器终极指南:一站式二次元游戏模组管理平台 【免费下载链接】XXMI-Launcher Modding platform for GI, HSR, WW and ZZZ 项目地址: https://gitcode.com/gh_mirrors/xx/XXMI-Launcher XXMI启动器是一款革命性的开源模组管理平台,专为《原神…...

别再为BGA扇出挠头了!用Allegro的无盘设计,轻松搞定0.8mm间距芯片的走线

突破BGA布线极限:Allegro无盘设计实战指南 在当今高速PCB设计领域,BGA封装芯片的布线挑战日益严峻。当面对0.8mm甚至更小间距的BGA芯片时,传统布线方法往往捉襟见肘——差分对无法保持等长、电源通道拥挤不堪、过孔区域几乎无处下脚。这些困境…...

CompressO:你的数字存储空间管理专家,让视频压缩变得如此简单

CompressO:你的数字存储空间管理专家,让视频压缩变得如此简单 【免费下载链接】compressO Convert any video/image into a tiny size. 100% free & open-source. Available for Mac, Windows & Linux. 项目地址: https://gitcode.com/gh_mirr…...

安卓逆向效率翻倍:用NP管理器3.0.18的Dex混淆与资源加密,给你的APK加把“锁”

安卓应用安全加固实战:NP管理器3.0高级混淆与加密技术解析 在移动应用开发领域,安全防护始终是开发者面临的核心挑战之一。随着安卓生态的开放特性,APK文件被反编译、篡改的风险与日俱增。对于金融、游戏等高价值应用而言,一套完善…...

终极免费神器:3分钟搞定Elsevier审稿状态追踪的完整指南

终极免费神器:3分钟搞定Elsevier审稿状态追踪的完整指南 【免费下载链接】Elsevier-Tracker 项目地址: https://gitcode.com/gh_mirrors/el/Elsevier-Tracker 还在为Elsevier期刊投稿后的漫长等待而焦虑吗?每天刷新页面查看审稿进度,…...

XUnity.AutoTranslator终极指南:5分钟让Unity游戏告别语言障碍

XUnity.AutoTranslator终极指南:5分钟让Unity游戏告别语言障碍 【免费下载链接】XUnity.AutoTranslator 项目地址: https://gitcode.com/gh_mirrors/xu/XUnity.AutoTranslator 还在为看不懂的日文、英文游戏而烦恼吗?XUnity.AutoTranslator正是你…...

SQL窗口函数性能瓶颈排查_执行计划中的关键点

WindowAgg节点cost高或width异常(>1000字节)是性能问题首要信号,因窗口函数需缓存整分区数据,width大加重内存与磁盘压力,cost高常反映排序或物化代价被低估。看懂执行计划里 WindowAgg 节点的 cost 和 widthPostgr…...

永磁同步电机在工业风扇中的应用

随着工业制造、物流仓储、商业建筑等领域对空间通风需求的不断提升,对于通风效率、节能降耗以及智能管理的要求也日益严格。在这样的背景下,工业风扇行业迎来了技术革新与市场拓展。2026年,一些具备研发实力、能适配多种场景且拥有全球化服务…...

摄影入门 | 从光到电:数码相机的成像核心

1. 从胶片到数码:感光技术的革命 还记得小时候第一次看到胶片相机时的好奇吗?那时候按下快门后要等上好几天才能看到照片,而现在我们用数码相机拍完立刻就能查看。这种变化的核心,就是感光技术的革命性突破。 传统胶片相机依赖的是…...

GitX智能版本控制助手:告别Git命令行,让版本控制更高效

GitX智能版本控制助手:告别Git命令行,让版本控制更高效基于Python Tkinter构建的图形化Git工具,将日常操作效率提升300%背景与痛点 在现代软件开发中,Git已成为版本控制的事实标准。然而,对于许多开发者(特…...

VSCode护眼主题终极指南:如何完美复刻Eclipse绿色背景(附详细配置代码)

VSCode护眼主题终极指南:如何完美复刻Eclipse绿色背景(附详细配置代码) 作为一名长期与代码打交道的开发者,眼睛的健康问题不容忽视。许多从Eclipse转向VSCode的用户都会怀念那个经典的绿色背景——它不仅代表着一种习惯&#xff…...

3步解锁《艾尔登法环》帧率限制:免费提升游戏体验的完整指南

3步解锁《艾尔登法环》帧率限制:免费提升游戏体验的完整指南 【免费下载链接】EldenRingFpsUnlockAndMore A small utility to remove frame rate limit, change FOV, add widescreen support and more for Elden Ring 项目地址: https://gitcode.com/gh_mirrors/…...

Gemini 科研示意图 / 流程图生成,一键出图

在学术研究和项目汇报中,清晰的示意图和流程图往往比大段文字更有说服力。但手动绘制这些图形耗时耗力,尤其是对非设计背景的研究者而言。这时,AI工具的价值就凸显出来了。在探索各种AI绘图能力时,像库拉KULAAI(t.kulaai.cn)这样的…...

【Java Loom响应式转型终极指南】:2026企业级落地的5大避坑法则与性能实测数据(JVM 21.0.4+ Project Loom GA深度验证)

第一章:Java Loom响应式转型的底层动因与2026企业级就绪度全景评估Java Loom 项目不再仅是协程(Virtual Threads)的语法糖,而是JVM运行时模型的一次范式跃迁——它重构了阻塞与非阻塞、线程与任务、同步与异步之间的边界。其核心动…...

GraalVM Native Image内存优化终极清单(含JFR+Native Memory Tracking双栈诊断流程):覆盖Spring Boot 3.x + Jakarta EE 9+全生态

第一章:GraalVM Native Image内存优化的企业级价值与挑战在云原生与微服务架构深度落地的今天,GraalVM Native Image 通过将 JVM 应用提前编译为平台原生可执行文件,显著降低了启动延迟与运行时内存开销。其内存优化效果并非仅体现于堆内存&a…...

【C# .NET 11 AI推理加速实战指南】:3大GPU绑定陷阱、5种ONNX Runtime优化配置、11个真实报错代码级修复方案

第一章:C# .NET 11 AI推理加速报错解决方法总览 在 C# .NET 11 中集成 ONNX Runtime 或 ML.NET 进行 AI 模型推理时,常因运行时环境、本机依赖或 API 兼容性问题引发异常,如 DllNotFoundException、 InvalidDataException(ONNX 图…...

Python高级应用系列(十):内存管理与性能优化——让你的Python飞起来

标签: Python | 性能优化 | 内存管理 | profiling | gc | 性能调优 字数: 约 4500 字 建议阅读时间: 14 分钟 前言 Python 程序慢、内存占用高,大多数情况下不是 Python 语言本身的问题,而是代码写法和数据结构选择的问题。一行不当的列表推导式、一个意外持有的对象引用…...

ssm校园失物招领信息系统小程序(文档+源码)_kaic

第五章 系统实现 5.1用户端功能模块 用户登录,用户通过输入用户名和密码,选择角色并点击登录进行系统登录操作,如图5-1所示。 图5-1用户登录界面图 用户注册,通过填写用户名、密码、姓名、性别、手机、邮箱等信息,输…...

短信验证码接口被刷如何防范?

短信验证码接口被刷如何防范? 在数字化时代,短信验证码已成为身份验证的重要手段,广泛应用于注册、登录、支付等场景。随着黑灰产技术的升级,短信验证码接口被恶意刷取的现象日益猖獗,不仅导致企业成本激增&#xff0…...

别再让LaTeX表格乱跑了!用[h]和[htbp]参数精准控制表格位置(附Overleaf实战)

LaTeX表格浮动控制完全指南:从基础参数到高级布局技巧 第一次在LaTeX中插入表格时,很多人都会遇到这样的困惑:明明代码中表格写在某段文字之后,编译后却跑到了页面顶部。这种"表格乱跑"的现象其实是LaTeX浮动体机制在起…...

R 4.5 IoT聚合配置已过时?2024年TSDB联邦查询新规下,3种向后兼容迁移路径限时披露

第一章:R 4.5 物联网数据聚合配置R 4.5 版本引入了原生支持轻量级物联网设备数据流聚合的 iotagg 模块,专为边缘节点低内存环境优化。该模块通过时间窗口滑动与标签路由机制,实现毫秒级延迟的数据清洗、去重与多源对齐,无需依赖外…...

ComfyUI环境崩溃?一键修复,So Easy!小白无压力,保姆级操作来了!

一、环境自动备份功能详解 1.环境备份问题 常见问题:在ComfyUI中安装插件或依赖时,最头疼的问题可能是不仅没把想要装的插件安装好,还把环境搞坏了,导致整个包都启动不了。 恢复困难:如果没有代码基础,或…...

写论文还在“单打独斗”?好写作AI的“学术副驾”模式,让你的研究灵魂不再被机器吞噬

在我的论文写作科普课上,总有学生问同一个问题:“老师,市面上AI论文软件那么多,到底哪个好?” 说实话,这个问题让我有点为难。因为市面上大部分AI论文软件,都在做同一件事——给你一个“全文生…...

别再被“一键生成”忽悠了!好写作AI教你重新定义什么叫“好用的AI写作软件”

每隔一段时间,我的后台就会收到同一条私信: “老师,AI写作软件哪个好用?能不能推荐一个?” 这个问题看起来很简单,但每次我都不知道怎么回答。因为“好用”这两个字,对不同的人来说&#xff0…...

孤能子视角:AI智能原理,“所有智能,都是茧房里的耦合“,以及人的主场

(这里豆包回答,它表达轻松。标题有点大,内容还是实在的。仅供参考)(这次我"自我解剖"以第三者观察符与AI互动,看聊出什么玩意出来。这也是"分形进分形出""自说自话""自我说服"案例。AI对作者描画的一…...

你以为开题报告是在写作文?好写作AI告诉你,它其实是一次“决策”

在我教的论文写作科普课里,有一个场景反复上演。 一位研一的学生,抱着一沓打印出来的文献,站在讲台前,一脸认真地对我说:“老师,我的开题报告文献综述写了6000字,但导师说我是‘文献汇编’&…...

你当问卷调查是什么?不是在“发传单”!好写作AI教你设计出能发顶刊的学术问卷

很多人把问卷设计当成一件“谁都会”的事:列几个问题,发出去,回收数据,分析收工。 如果你也是这么想的,那么恭喜你,你已经成功加入了“问卷翻车俱乐部”。 据学者对我国近六年教育类核心期刊发表的113篇问…...

如何高效使用fre:ac音频转换器:从入门到精通的完整指南

如何高效使用fre:ac音频转换器:从入门到精通的完整指南 【免费下载链接】freac The fre:ac audio converter project 项目地址: https://gitcode.com/gh_mirrors/fr/freac fre:ac音频转换器是一款功能强大、完全免费的开源工具,专为音乐爱好者和专…...

介绍玻璃线纹尺

玻璃线纹尺(标准玻璃尺)不是用来直接量零件的“普通尺子”,而是精密仪器和机床的“标尺”。它的核心作用是校准(检定仪器精度)和标定(设定系统比例),通常需要配合显微镜或影像系统使…...