Ubuntu 18.04安装QtMqtt模块、低于QT5.0有其他mqtt sdk库

这篇博客介绍了如何在Ubuntu18.04环境下,使用QT5.14编译QtMqtt模块,并手动安装到QT编译kit中。过程中涉及了源码的修改以适配QT5.14,包括替换特定函数和信号槽的写法。编译完成后,通过将头文件、库文件和pkgconfig文件放置到相应目录,确保库的正常使用。此外,还提供了在不同平台下编译MQTT库的通用方法和注意事项。
摘要由CSDN通过智能技术生成


前言:
如果你要移植到开发板,也是同样的方法,根据你的QT 交叉编译kit更换类似函数(比如我板子的QT交叉编译kit是4.8,虚拟机的QT编译kit版本是5.14),然后把生成的文件扔进对应kit的includelib等文件夹里。后续写完程序用交叉kit编译生成后即可直接下载到开发板执行。

但是这个库最低用5.0版本以上的QTkit来编译,低于这个版本的kit缺少的函数更多,无法替换mqtt源码里同功能的函数,且都是重要函数,想移植就没办法了。我实际使用的是Eclipse Paho C,这个就没有QT版本限制。交叉编译的朋友只需要进Makefile更换CC编译工具即可


这里提供GitHub上有的各种语言(java php go python…)mqtt库,各位可以按需选择下载
戳我戳我戳我
PS:
如果是window平台下,编译中可能会需要perl,参考博客


下载MQTT模块

附上GitHub上的QT官方原库:戳我

Ubuntu+QT5.14下编译模块

把源码目录下的src/mqtt 里面的头文件复制一份放到你QT编译模块下的inlcude。因为编译src时需要这些头文件
在QT5.14 下新建一个QtMqtt 文件夹
在这里插入图片描述
并把src/mqtt 里的文件复制过去,doc似乎是说明文档?可以酌情复制

2,用QT打开源码目录下的qtmqtt.pro ,然后选择releas编译
在这里插入图片描述


注意:自行修改源码后,并未测试稳定性。所以要用于实际产品的朋友可以选其他的版本,如我实际使用的是Eclipse Paho C,这个就没有QT版本限制。交叉编译的朋友只需要进Makefile更换CC编译工具即可

因为这个版本的mqtt,用的是QT6.0编译,所以mqtt源码有些函数我的qt5.14编译kit不支持,具体支持哪些函数,跟你的编译kit版本有关系。
在这里插入图片描述
根据你kit里支持的函数,替换掉源码里高版本QT才支持的函数。下面将介绍我用QT5.14的函数替换mqtt源码的高版本函数。

更换一:
在这里插入图片描述

src->Sources->qmqttconnection.cpp 1454行 调整qlist 大小的resize 需要更换。低于QT 6.0的没有resize 这个函数 我的QT5.14 有reserve


更换二:
在这里插入图片描述

src->Sources->qmqtttopicfilter.cpp 245行 QStringView,我的QT5.14没有切割函数,我换成了QString


在这里插入图片描述

src->Sources->qmqttconnection.cpp 177 行的信号连接会有错误,经查阅资料,换种写法,并在源文件声明为槽函数
在这里插入图片描述
信号与槽的几种connnect写法参考

编译,完事儿!

手动安装各种文件

想知道qt编译kit下的include在哪里,就随便写个#include <>的有效头文件,然后鼠标放上去,就会弹出所在目录

PS:想指明第三方库所在路径,有四种方法:,
1,添加xx.pc文件export PKG_CONFIG_PATH=/xxx:$PKG_CONFIG_PATH和指定搜索路径的export LD_LIBRARY_PATH=/yourdir/:$LD_LIBRARY_PATH
2,在 /etc/ld.so.conf 文件中添加库的搜索路径。将库文件的绝对路径/lib直接写进去就OK。
3,丢到编译器的默认搜索路径。使用 arm-前缀-gcc -print-file-name=xxx.so 来找到默认路径
4,在configure阶段,添加-LDFLAG 增加编译选项给编译器直接增加搜索路径
如果你移动了lib库文件,对应的xx.pc也要同步更新,且放到pkgconfig搜索目录下!!否则pkg-config会搜索不到!

在这里插入图片描述


首先是编译输出目录的文件放进去qt编译kit下的include
在这里插入图片描述


然后是放lib模块,记得cmka和pkconfig里面的文件也要复制放进去对应目录
另外强调一下,pkconfig里面的 .pc 文件是指明include和lib文件所在地的,编译前指定了这个库放在什么路径,那这个 .pc 文件里面就会指向什么路径。而当你移植到对应目录的时候,最好改一下.pc 文件
在这里插入图片描述


最后放库文件
在这里插入图片描述


然后尝试编译Mqtt源码目录下的emample示例程序,能跑通就说明编译成功! 注:如果提示头文件找不到,就补齐文件所在目录,指明一下即可。如#include <QtMqtt/qmqttclient.h>
在这里插入图片描述

若有不正确的地方,请各位不吝赐教!

你好!关于在Ubuntu上使用QtMQTT,你可以按照以下步骤进行操作: 1. 首先,确保你已经安装Qt开发环境和MQTT。可以使用以下命令在Ubuntu安装Qt: ``` sudo apt-get install build-essential qt5-default ``` 安装MQTT可以使用以下命令: ``` sudo apt-get install libmosquitto-dev ``` 2. 创建一个新的Qt项目。你可以使用Qt Creator来创建一个空白项目或者选择适合你的项目模板。 3. 在Qt项目中添加MQTT的依赖。在.pro文件中添加以下行: ``` LIBS += -lmosquitto ``` 4. 在代码中引入MQTT的头文件,并使用MQTT功能。下面是一个简单的示例代码,用于连接到MQTT代理并发布和订阅主题: ```cpp #include <QCoreApplication> #include <mosquitto.h> void onConnect(struct mosquitto *mosq, void *obj, int rc) { if (rc == 0) { qDebug() << "Connected to MQTT broker"; mosquitto_subscribe(mosq, NULL, "topic", 0); // 订阅主题 mosquitto_publish(mosq, NULL, "topic", 5, "message", 0, false); // 发布消息 } else { qDebug() << "Failed to connect to MQTT broker"; } } void onMessage(struct mosquitto *mosq, void *obj, const struct mosquitto_message *message) { qDebug() << "Received message:" << (char *)message->payload; } int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); struct mosquitto *mosq; mosquitto_lib_init(); mosq = mosquitto_new(NULL, true, NULL); mosquitto_connect_callback_set(mosq, onConnect); mosquitto_message_callback_set(mosq, onMessage); mosquitto_connect(mosq, "localhost", 1883, 60); return a.exec(); } ``` 5. 编译和运行你的Qt项目。 这样,你就可以在Ubuntu上使用QtMQTT进行开发了。请注意,这只是一个简单的示例,你可能需要根据你的具体需求进行更多的配置和代码编写。希望对你有所帮助!如果有任何问题,请随时提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值