首页>行业>正文
嵌入式Linux下QT移植MQTT的方法
2023-05-23 16:53:40    来源:嵌入式大本营

环境:


(资料图)

Ubuntu18.04

开发板:debian

交叉编译工具链:arm-linux-gnueabihf-gcc 8.3.0

Qt:Qt5.11.2

解决方案在文末,如不想看中间过程,可直接跳转到文末。

mqtt是一种工业物联网协议,可以用来连接阿里云、百度云、onenet等云端,应用广泛。

关于mqtt的使用,网上资料主要有以下几种:

1、STM32+ESP8266:这种方式主要是借助ESP8266模块来联网,至于mqtt协议基本上是要自己实现的。 也就是mqtt的报文需要自己去构建,好在mqtt的报文并不是很复杂,稍微研究一下也能理解。

2、Linux下使用官方sdk包,比如阿里云有提供阿里的sdk包,下载后调用它提供的接口来连接阿里云。

3、QT里移植mqtt:这种方式因为可以直接调用官方写好的接口,因此使用起来就简单多了,但是这个移植过程并不是那么简单。 这分为Windows端和Linux端。 Windows端就不说了,我主要说一下Ubuntu下和arm开发板上的移植。

移植也分为两种,一种是编译成动态链接库,一种是直接把mqtt官方源码包含进去自己的工程里面,然后一起编译。 我本人觉得要编译成库,然后配置环境变量什么的比较麻烦,还不如直接把源码包含进去。

先说Ubuntu下的移植:

这个我是参考网上的,Linux Qt下MQTT模块的导入(移植)

按照这篇博客来操作,实测有效,总结起来非常简单,就是下载源码,添加到自己的工程中,然后编译,编译出错的都是因为头文件包含的时候,应该把<>替换成"",这两种头文件包含的区别相信大家都很清楚。

这样就移植好了。 可以看到,在这里使用gcc编译可以通过,并且写个简单的测试代码,确实能连接云端

接下来说一下移植到arm端:

这部分网上的资料是真的少,搜索半天都找不到你想要的。

我们知道,要移植到arm开发板上面,需要使用交叉编译工具链,正常情况下,你写好的qt程序在主机Ubuntu上能运行,只要换成交叉编译工具编译,就可以放到开发板上运行了。

但是这里你这样做会发现报错。

提示QSslConfiguration这种类型不认识(未定义)。于是我就去找一下这个在哪里有定义,找了一下,发现这种类型其实在qsslconfiguration.h这个文件中是有定义的,但是前面通过#ifndef QT_NO_SSL这个宏没有把这段代码编译进去

于是真相大白了,在gcc里没有那个宏定义,所以下面那段代码会被编译,所以自然就不会出现未定义这种错误。但是当使用交叉编译工具链的时候,在qtnetwork-config.h这个文件中找到了这个宏定义,所以#ifndef QT_NO_SSL 到#endif之间的代码都不会被编译,自然QSslConfiguration就会未定义了。

于是我猜想,把qtnetwork-config.h中的这个QT_NO_SSL宏给注释掉,应该就可以了,虽然 说这样乱改代码可能导致一些意想不到的结果,但我还是想试一下看能不能编译通过。结果发现会出现一连串的连锁反应,改了这个,又会出现新的错误,所以这种方法不行。而且像这种文件它默认是只读的,也就是说它本来就不希望你去修改,所以不应该这样做。

后面我又想,既然直接改变宏定义不行,能不能把报错的地方直接注释掉,反正那些函数可能并没有用到,所以注释掉应该不会有什么影响

这里是报错的那个类的头文件,再切换到源文件

发现都是没有编译的,但是仔细观察源文件,其实也是有QT_NO_SSL这个宏的

这里就让人觉得很奇怪了,同样是有这个宏,其他的地方都不会被编译,这里却会被编译,而且其他地方都可以跳转到qtnetwork-config.h文件中去,这里却不会。

那么,很容易猜到,在这个源文件里没有包含qtnetwork-config.h这个头文件,导致没有定义那个宏。

解决办法:在qmqtt_ssl_socket_p.h文件中添加一句代码:

#include "qtnetwork-config.h"

问题成功解决。把编译好的文件放在arm开发板上,可以成功执行

至此,移植结束,可以尽情开发了。

关键词:

嵌入式Linux下QT移植MQTT的方法

mqtt是一种工业物联网协议,可以用来连接阿里云、百度云、onenet等云端,应用广泛。2023-05-23

每日速读!优化营商环境 四川多地发布民营经济“新政”

“从开工到投产,用了不到1年时间,建设速度超出我们的预期。”5月19日,宜宾昆仑新能源有限公司锂电池电解2023-05-23

当前热门:天津玛雅海滩水公园门票购买注意事项

➤➤天津玛雅海滩水公园门票购买注意事项1 游客持票入园前,须认真阅读并承诺遵守检票口处《游客入园须知》2023-05-23

海口秀英警方一天内破获2起盗窃案,抓获2名嫌疑人 全球观热点

近日,海口市公安局秀英分局全面开展防范和打击街面盗窃犯罪行为,组织警力对盗窃频发区域开展专项打击,一2023-05-23

盟军敢死队使命召唤全攻略(盟军敢死队之使命召唤攻略)

来自使命召唤任务的盟军敢死队怎么办?下面就给大家讲解一下。盟军敢死队使命召唤全攻略1 任务一:一线光明2023-05-23

耽美文小攻囚禁小受_耽美囚禁

1、《叶何》-裳蚜作品简介下雨天深井冰攻把觊觎已久的直男受拖回家酱酱酱的故事。2、攻自闭,有强制囚禁情2023-05-23

一汽解放:L4级智能驾驶商用车尚未大规模应用 世界观焦点

证券时报e公司讯,一汽解放近期在业绩说明会上表示,L4级智能驾驶商用车的应用场景比较受限,目前解放在港2023-05-23

加拿大特斯拉失控案调查结果出炉 系操作失误非机械故障

有关特斯拉发生失控事故的新闻已经屡见不鲜,这也让不少人对其车辆安全性产生了怀疑。近日,加拿大警方公布2023-05-23

中土两国近十年最大机车订单全面交付-每日信息

中土两国近十年最大机车订单全面交付2023-05-23

环球简讯:视频丨第十二届上海高级定制周拉开帷幕

新民晚报“上海时刻”出品5月22日晚,由上海国际时尚联合会主办的第十二届上海高级定制周在大豫园片区内的B2023-05-23

车联网V2X已“上路”-每日简讯

在5G、MEC(多接入边缘计算)等新技术的加持下,车联网技术在高可靠、低时延方面有很大改善,并加速产业大2023-05-23

当前观察:无糖茶竞速搏未来

斑马消费陈晓京夏季饮料消费旺季还没到来,终端饮料冰柜的饮料柜就已变了天,“冰红茶们”一统江湖的时代,2023-05-23

世界焦点!word文档怎么画竖线(word文档怎么画线条)

单词绘制方法:1 首先,打开一个word文档。2 点击顶部的“插入”。3 选择下面的“形状”。4 在形状中,选择2023-05-23

宁夏启动用能权有偿使用和交易改革

实施用能权交易制度改革,对于提高能源利用效率、实现能耗总量和强度“双控”目标具有重要意义。5月22日,2023-05-23

环球热头条丨吴倩的男朋友是个富二代_吴倩的男朋友

1、国产片声音都是后期加的。2、韩剧都是用现场原音。3、吴倩用自己的声音配的。本文到此分享完毕,希望对2023-05-23

小学四年级奥数题及答案大全 奥数题大全及答案四年级

今天来聊聊关于小学四年级奥数题及答案大全,奥数题大全及答案四年级的文章,现在就为大家来简单介绍下小学2023-05-23

马来西亚币种叫什么_马来西亚币

1、代号:MYR英文:MalaysiaRinggit符号:RM马来文:RinggitMalaysia。本文分享完毕,2023-05-23

全球热点!急组词_急的组词有哪些

1、焦虑:焦虑:不要着急,有什么问题,讨论解决。现在还早。急什么?2、慌忙:他心里一急,动作加快了。当2023-05-23

今日聚焦!1158万人!今年高校毕业生数量再创历史新高!找工作更难了...

点击下方卡片,关注“CVer”公众号AI CV重磅干货,第一时间送达今天Amusi看到这么一则新闻: 今年高校毕业2023-05-22

机票是啥意思 机票上cn是什么意思

今天来聊聊关于机票是啥意思,机票上cn是什么意思的文章,现在就为大家来简单介绍下机票是啥意思,机票上cn2023-05-22

推动民营经济健康发展①丨四川多地发布民营经济“新政”,优化营商环境,培育发展新动能_环球报资讯

好的营商环境让企业轻装上阵、加速奔跑,今年以来,为促进民营经济健康发展、高质量发展,我省各地各部门纷2023-05-22

全球百事通!白瓜子的功效与作用_瓜子的好处介绍

欢迎观看本篇文章,小升来为大家解答以上问题。白瓜子的功效与作用,瓜子的好处介绍很多人还不知道,现在让2023-05-22

世界热点!长沙预制菜产业“乘风而起”

红网时刻新闻5月22日讯(通讯员阳娟蔺杨记者彭超)5月20日-21日,2023年首届湘赣预制菜产业供需对接会在长2023-05-22

全球观热点:车虾怎么烧好吃?

1、洗净的生姜去皮切成片,香葱切成葱段备用。2、起锅烧火,锅中倒入适量的食用油,先下入姜片与一半葱段,2023-05-22

叹换偏旁组词大全_叹换偏旁组词

1、繁换成心字底组成慜,换成鱼字底组成鳘。2、组词:慜:离慜、慜顾、叹慜、怜慜、聪慜鳘:鳘姑、鳘鱼汤基2023-05-22