news 2026/5/1 5:35:27

保姆级教程:在Ubuntu 22.04上为RK3568开发板交叉编译Qt5.15.8(含完整配置脚本)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
保姆级教程:在Ubuntu 22.04上为RK3568开发板交叉编译Qt5.15.8(含完整配置脚本)

从零构建RK3568 Qt交叉编译环境:完整配置与避坑指南

当开发者拿到一块全新的RK3568开发板时,最迫切的需求之一就是快速搭建起Qt开发环境。不同于x86平台的直接编译,嵌入式开发需要面对工具链配置、系统库匹配、交叉编译参数调整等一系列挑战。本文将手把手带你完成Ubuntu 22.04系统下Qt 5.15.8的完整交叉编译流程,并提供经过验证的配置脚本,帮你避开那些新手常踩的"坑"。

1. 环境准备与工具链配置

在开始编译Qt之前,我们需要确保基础环境正确无误。RK3568采用Arm Cortex-A55架构,这意味着我们需要对应的aarch64工具链。不同于简单的apt安装,嵌入式开发往往需要厂商定制过的工具链。

1.1 获取官方工具链

Rockchip官方提供的工具链通常包含在SDK包中,路径为rk3568_linux/prebuilts/gcc/linux-x86/。建议将其复制到系统标准路径:

sudo mkdir -p /opt/toolchains sudo cp -r rk3568_linux/prebuilts/gcc/linux-x86/ /opt/toolchains/aarch64-rockchip-linux-gnu

重要提示:不同厂商提供的工具链可能有细微差别,直接使用通用工具链可能导致运行时库不兼容。务必确认你使用的是RK3568官方配套版本。

1.2 配置环境变量

为了让系统识别我们的工具链,需要设置以下环境变量。建议将这些配置写入~/.bashrc以便永久生效:

export RK3568_TOOLCHAIN=/opt/toolchains/aarch64-rockchip-linux-gnu export PATH=$RK3568_TOOLCHAIN/bin:$PATH export CC=aarch64-rockchip-linux-gnu-gcc export CXX=aarch64-rockchip-linux-gnu-g++

验证工具链是否生效:

aarch64-rockchip-linux-gnu-gcc --version

如果看到类似aarch64-rockchip-linux-gnu-gcc (GCC) 10.3.0的输出,说明配置成功。

2. Qt源码获取与基础配置

Qt官方提供了完整的源代码包,我们需要下载并配置为RK3568交叉编译。

2.1 下载Qt源码

推荐从Qt官方镜像获取稳定版本:

wget https://download.qt.io/archive/qt/5.15/5.15.8/single/qt-everywhere-opensource-src-5.15.8.tar.xz tar xvf qt-everywhere-opensource-src-5.15.8.tar.xz cd qt-everywhere-opensource-src-5.15.8

2.2 关键配置参数解析

Qt的configure脚本有上百个配置选项,针对嵌入式环境我们需要特别关注以下参数:

参数作用RK3568推荐值
-xplatform指定目标平台linux-arm-gnueabi-g++
-prefix安装目录$PWD/install
-opensource使用开源协议必须添加
-confirm-license自动确认协议建议添加
-skip排除不需要的模块qt3d, qtcanvas3d等
-no-feature禁用特定功能-no-opengl -no-cups

一个经过验证的基础配置脚本(configure.sh)如下:

#!/bin/bash ./configure \ -prefix $PWD/install \ -confirm-license \ -opensource \ -release \ -xplatform linux-arm-gnueabi-g++ \ -optimized-qmake \ -no-opengl \ -no-sse2 \ -no-openssl \ -no-cups \ -skip qt3d \ -skip qtwebengine \ -skip qtdoc \ -nomake examples \ -nomake tests

特别注意:RK3568的GPU驱动对OpenGL ES支持有限,建议使用-linuxfb参数指定Linux帧缓冲作为显示后端。

3. 深度定制qmake配置

Qt的交叉编译核心在于正确配置平台描述文件。对于RK3568,我们需要修改qtbase/mkspecs/linux-arm-gnueabi-g++/下的配置文件。

3.1 修改qmake.conf

这是最关键的一步,直接影响最终生成的Makefile。以下是必须修改的内容:

# qmake configuration for RK3568 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-rockchip-linux-gnu-gcc QMAKE_CXX = aarch64-rockchip-linux-gnu-g++ QMAKE_LINK = aarch64-rockchip-linux-gnu-g++ QMAKE_LINK_SHLIB = aarch64-rockchip-linux-gnu-g++ # 系统库路径 QMAKE_INCDIR += $RK3568_TOOLCHAIN/include QMAKE_LIBDIR += $RK3568_TOOLCHAIN/lib # 链接器参数 QMAKE_LFLAGS += -Wl,-rpath-link,$RK3568_TOOLCHAIN/lib

3.2 解决常见编译错误

在编译过程中可能会遇到以下问题:

  1. 找不到libstdc++

    sudo ln -s $RK3568_TOOLCHAIN/aarch64-rockchip-linux-gnu/lib64/libstdc++.so.6 /usr/lib/
  2. 头文件路径错误: 在qmake.conf中明确指定系统头文件路径:

    QMAKE_CFLAGS += -I$RK3568_TOOLCHAIN/aarch64-rockchip-linux-gnu/include
  3. 链接器找不到库

    export LD_LIBRARY_PATH=$RK3568_TOOLCHAIN/lib:$LD_LIBRARY_PATH

4. 编译与安装

配置完成后,可以开始编译过程。由于Qt代码量庞大,建议使用多线程编译:

make -j$(nproc) 2>&1 | tee build.log make install

编译时间根据机器性能不同,可能需要1-3小时。建议使用tee命令保存编译日志,方便排查问题。

4.1 验证编译结果

安装完成后,检查目标目录:

ls install/bin/qmake

如果看到qmake可执行文件,说明基本编译成功。进一步验证:

file install/bin/qmake

输出应显示为ELF 64-bit LSB executable, ARM aarch64格式。

5. 开发板部署与测试

编译出的Qt库需要部署到RK3568开发板上才能运行应用程序。

5.1 部署Qt运行时

将以下目录复制到开发板的/usr/local/下:

  • install/lib
  • install/plugins
  • install/qml

设置开发板环境变量(/etc/profile):

export QT_ROOT=/usr/local/qt5.15 export QT_QPA_PLATFORM=linuxfb export LD_LIBRARY_PATH=$QT_ROOT/lib:$LD_LIBRARY_PATH

5.2 交叉编译测试程序

创建一个简单的测试程序test.cpp

#include <QApplication> #include <QLabel> int main(int argc, char *argv[]) { QApplication app(argc, argv); QLabel label("Qt on RK3568 Works!"); label.show(); return app.exec(); }

对应的test.pro文件:

QT += widgets TARGET = test SOURCES += test.cpp

使用交叉编译:

export PATH=$PWD/install/bin:$PATH qmake test.pro make

将生成的test可执行文件复制到开发板运行,如果看到显示窗口,说明整个环境配置成功。

6. 高级配置与优化

基础环境搭建完成后,还可以进行以下优化:

6.1 减小Qt体积

通过裁剪不需要的模块和功能,可以显著减少Qt库的大小:

./configure \ ...其他参数... -no-feature-sql \ -no-feature-xml \ -no-feature-network \ -no-feature-testlib

6.2 启用硬件加速

RK3568支持OpenGL ES和VPU加速,可以通过以下方式启用:

./configure \ ...其他参数... -eglfs \ -opengl es2 \ -device-option CROSS_COMPILE=aarch64-rockchip-linux-gnu-

6.3 静态编译

对于生产环境,可以考虑静态编译以减少运行时依赖:

./configure \ ...其他参数... -static \ -no-pch

静态编译会显著增加编译时间和最终可执行文件大小,但部署更加简单。

7. 自动化脚本与持续集成

为了简化重复配置过程,可以创建完整的自动化脚本。以下是一个整合了所有步骤的示例(build_qt_rk3568.sh):

#!/bin/bash # 工具链配置 export RK3568_TOOLCHAIN=/opt/toolchains/aarch64-rockchip-linux-gnu export PATH=$RK3568_TOOLCHAIN/bin:$PATH # 下载源码 wget https://download.qt.io/archive/qt/5.15/5.15.8/single/qt-everywhere-opensource-src-5.15.8.tar.xz tar xvf qt-everywhere-opensource-src-5.15.8.tar.xz cd qt-everywhere-opensource-src-5.15.8 # 应用RK3568特定补丁 patch -p1 < ../rk3568_qt_patch.diff # 配置 ./configure \ -prefix $PWD/install \ -confirm-license \ -opensource \ -release \ -xplatform linux-arm-gnueabi-g++ \ -optimized-qmake \ -linuxfb \ -no-opengl \ -no-sse2 \ -no-openssl \ -skip qt3d \ -skip qtwebengine \ -nomake examples \ -nomake tests \ 2>&1 | tee configure.log # 编译安装 make -j$(nproc) 2>&1 | tee build.log make install 2>&1 | tee install.log # 打包结果 tar czvf qt5.15.8_rk3568.tar.gz install/

这个脚本可以集成到CI/CD系统中,实现自动化构建。对于团队开发,建议将编译好的Qt库打包成docker镜像,确保所有开发者环境一致。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/1 5:33:25

轻量级API网关Code-Gate:统一入口、权限校验与微服务架构实践

1. 项目概述与核心价值最近在整理一些老项目的代码仓库&#xff0c;翻到了一个挺有意思的东西——Gil2015/code-gate。乍一看这个项目名&#xff0c;你可能会联想到“代码门”或者某种访问控制机制。没错&#xff0c;它的核心定位就是一个轻量级的、面向API或服务调用的统一入口…

作者头像 李华
网站建设 2026/5/1 5:32:49

视频理解中的自适应推理:VideoAuto-R1框架解析

1. 视频理解中的自适应推理革命在当今多模态大模型蓬勃发展的时代&#xff0c;视频理解一直是个令人着迷又充满挑战的领域。作为一名长期关注计算机视觉与多模态融合的研究者&#xff0c;我见证了从早期基于规则的方法到如今端到端深度学习模型的演进历程。最近&#xff0c;链式…

作者头像 李华
网站建设 2026/5/1 5:31:26

C++内存管理:从新手到高手的必备指南

一、C/C 内存分布 1.内存分布 在编译和执行C程序时&#xff0c;内存划分为几个不同的区域&#xff0c;各个区域承担不同的任务。以下是C内存的基本分布&#xff1a; 1.栈&#xff08;Stack&#xff09;&#xff1a; 用途&#xff1a;用于存储局部变量、数参数、返回地址等。特…

作者头像 李华
网站建设 2026/5/1 5:27:23

ARM SIMD饱和运算指令SQRSHRUN与SQSHL详解

1. ARM SIMD指令集概述在ARM架构中&#xff0c;SIMD&#xff08;Single Instruction Multiple Data&#xff09;技术通过单条指令同时处理多个数据元素&#xff0c;显著提升了数据并行处理能力。作为ARMv8/v9架构的重要组成部分&#xff0c;AdvSIMD扩展&#xff08;通常被称为N…

作者头像 李华