RK3568物联网实战:手把手教你用Qt5.14.2移植MQTT动态库(含完整Demo)
在嵌入式物联网项目的开发中,通信模块的集成往往是决定项目能否快速落地的关键一步。对于使用瑞芯微RK3568这类高性能处理器的开发者而言,如何在Qt应用框架中高效、稳定地引入MQTT协议支持,是一个既基础又充满细节挑战的任务。很多朋友在尝试将第三方MQTT库,比如基于Qt的qmqtt,移植到目标板时,常常会遇到动态库加载失败、符号链接错误、或者运行时崩溃等问题,这些“坑”足以消耗掉一整个下午的调试时间。
本文将从一次真实的项目移植经历出发,为你拆解在RK3568平台上,基于Qt 5.14.2交叉编译环境,将qmqtt库从源码编译、动态库移植到最终Demo应用联调的完整流程。我们不仅会按部就班地操作,更会聚焦于那些文档里很少提及的“避坑”细节,例如如何正确配置软链接以避免恼人的libQt5Qmqtt.so.1: cannot open shared object file错误,以及如何利用手机端的MQTT Dashboard工具进行可视化、实时联调验证,确保你的物联网终端能够可靠地“说话”。无论你是正在评估RK3568用于物联网网关,还是需要为现有设备增加云端通信能力,这篇实战指南都将提供一条清晰、可复现的路径。
1. 环境准备与源码获取
在开始任何交叉编译工作之前,一个稳定、配置正确的开发环境是成功的基石。对于RK3568开发,我们通常需要在x86_64架构的Ubuntu主机上搭建针对ARM64(aarch64)的交叉编译工具链和Qt开发环境。
开发主机环境配置
我的工作环境基于Ubuntu 18.04 LTS,这个版本在嵌入式开发社区中仍有广泛的应用和较好的工具链支持。你需要确保系统中已安装必要的构建工具:
sudo apt-get update
sudo apt-get install build-essential git cmake
接下来是核心的交叉编译工具链。瑞芯微官方通常会提供针对其芯片优化的工具链。假设你已经获取了aarch64-linux-gnu-gcc工具链,并已将其路径加入系统的PATH环境变量。验证方法如下:
aarch64-linux-gnu-gcc --version
如果正确安装,你会看到类似gcc version 6.3.1 20170404 (Linaro GCC 6.3-2017.05)的输出。一个常见的疏忽是只安装了gcc,而忽略了配套的sysroot(目标系统的根文件系统)。完整的工具链应包含sysroot目录,其中存放了目标板(RK3568)运行所需的库和头文件。在后续Qt配置中,这个sysroot至关重要。
Qt for Device 的配置
Qt 5.14.2是一个长期支持版本,稳定性好。你需要的是Qt for Device的版本,即能够进行交叉编译的Qt。通常可以从Qt官网下载离线安装器,在安装时选择aarch64架构的组件。安装完成后,关键的步骤是配置一个用于RK3568的Qt Kit。
- 打开Qt Creator,进入
工具->选项->设备。 - 添加一个
Generic Linux Device,根据提示填写RK3568开发板的IP地址、用户名和密码,用于后续的部署和调试。 - 进入
工具->选项->Kits。 - 添加一个新Kit,例如命名为
RK3568 Qt 5.14.2 (aarch64)。 - 在这个Kit的配置中,你需要指定:
- 设备类型:选择刚才配置的Generic Linux Device。
- 编译器:分别指定C和C++的交叉编译器为
aarch64-linux-gnu-gcc和aarch64-linux-gnu-g++。 - Qt版本:添加一个手动指定的Qt版本,指向你交叉编译安装的Qt 5.14.2的
qmake路径(例如/opt/qt5.14.2-aarch64/bin/qmake)。 - Qt mkspec:通常需要根据你的工具链调整,可能需要复制一份
linux-aarch64-gnu-g++的mkspec并进行自定义。
注意:很多移植失败源于Qt Kit配置不正确,尤其是编译器和sysroot路径。务必确保编译器能正确找到目标板的头文件和库,否则编译出的程序在板子上无法运行。
获取qmqtt源码
qmqtt是一个基于Qt的MQTT客户端库,它封装了MQTT协议,提供了Qt风格的信号槽接口,使用起来非常方便。我们从其GitHub仓库获取源码:
git clone https://github.com/emqx/qmqtt.git
cd qmqtt
建议切换到某个稳定的发布标签,而不是直接使用master分支,以获得更好的稳定性。例如:
git checkout v1.0.2
源码结构清晰,核心代码位于src/mqtt目录下,examples目录下有一些参考示例。
2. 交叉编译qmqtt动态库
有了准备好的环境和源码,接下来就是编译生成能在RK3568上运行的动态库文件。这个过程的核心是让qmake使用我们为RK3568配置的交叉编译工具链。
使用Qt Creator打开并配置项目

&spm=1001.2101.3001.5002&articleId=152496020&d=1&t=3&u=9ce5a14d5eea461fa49b8266038944be)
3030

被折叠的 条评论
为什么被折叠?



