0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

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

CHANBAEK 来源:嵌入式大本营 作者:小小飞飞哥 2023-05-23 15:45 次阅读

环境:

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
    +关注

    关注

    87

    文章

    11199

    浏览量

    208691
  • 移植
    +关注

    关注

    1

    文章

    376

    浏览量

    28093
  • Ubuntu
    +关注

    关注

    5

    文章

    559

    浏览量

    29492
  • 工业物联网
    +关注

    关注

    25

    文章

    2356

    浏览量

    63567
  • MQTT
    +关注

    关注

    5

    文章

    646

    浏览量

    22391
收藏 人收藏

    评论

    相关推荐

    嵌入式linux部署qt的几个疑问

    QT程序不能直接在嵌入式linux里跑(这里指ARM平台);Windows做交叉编译需要使用插件,有点多余,直接用linux虚拟机做交叉编译;嵌入式
    发表于 10-27 09:47

    基于QT嵌入式linux图形应用软件设计

    嵌入式linux开发环境搭建、嵌入式linux开发模型、linux内核移植和文件系统、
    发表于 11-05 08:11

    嵌入式LinuxQT移植mqtt的步骤教程

    环境:Ubuntu18.04开发板:debian交叉编译工具链:arm-linux-gnueabihf-gcc 8.3.0QtQt5.11.2解决方案在文末,如不想看中间过程,可直接跳转到文末
    发表于 12-27 06:50

    嵌入式Linux系统的移植研究

    介绍嵌入式系统和嵌入式系统中的GUI , 详细说明三种常见的嵌入式GUI (Microwindows、MiniGUI 和QT)的设计结构和使用上的优缺点, 描述Microwindows
    发表于 04-24 10:43 23次下载

    基于Qt嵌入式Linux通讯簿程序设计

      摘 要: 随着嵌入式系统的发展,在Linux 使用Qt 开发嵌入式应用程序是嵌入式图形用户
    发表于 11-23 11:31 3571次阅读

    嵌入式linux GUI-Qt解析

    职业培训班》二期课程中嵌入式linux应用开发方面的重要内容。不少学员对QT方面的内容比较关注,所以在这里我们先对QT做一简单介绍。
    发表于 11-01 16:53 1次下载

    基于嵌入式LinuxQt编程实现数码相框的设计

    基于Linux使用Qt编写的数码相框架构设计方案通过使用纯C++语言开发来支持嵌入式Linux系统,采用
    的头像 发表于 03-05 08:05 3229次阅读

    基于嵌入式Linux系统Mini GUI的移植方法与过程详解

    的结构和特点,描述了将MiniGUI在ARM Linux移植方法与过程,并对这种基于MiniGUI的嵌入式系统开发做了展望。
    发表于 09-12 16:22 3623次阅读

    嵌入式LINUXQt开发入门教程

    嵌入式LINUXQt开发入门教程(最好的嵌入式开发板)-该文档为嵌入式LINUX
    发表于 08-04 11:01 30次下载
    <b class='flag-5'>嵌入式</b><b class='flag-5'>LINUX</b>的<b class='flag-5'>Qt</b>开发入门教程

    嵌入式linux安装qt

    QT程序不能直接在嵌入式linux里跑(这里指ARM平台);Windows做交叉编译需要使用插件,有点多余,直接用linux虚拟机做交叉编译;嵌入式
    发表于 10-20 18:06 6次下载
    <b class='flag-5'>嵌入式</b><b class='flag-5'>linux</b>安装<b class='flag-5'>qt</b>

    嵌入式LinuxQt

    嵌入式LinuxQt嵌入式LinuxQt配置特定设备嵌入
    发表于 11-01 17:06 3次下载
    <b class='flag-5'>嵌入式</b><b class='flag-5'>Linux</b>的<b class='flag-5'>Qt</b>

    嵌入式LinuxQT版本,嵌入式Linux版本Qt5.4快速部署

    (Toradex Apalis iMX6)基于Embedded Linux快速部署做较详细说明。嵌入式Linux版本Qt5.4快速部署--- by Toradex 秦海
    发表于 11-01 17:20 0次下载
    <b class='flag-5'>嵌入式</b><b class='flag-5'>Linux</b>的<b class='flag-5'>QT</b>版本,<b class='flag-5'>嵌入式</b><b class='flag-5'>Linux</b>版本<b class='flag-5'>Qt</b>5.4快速部署

    嵌入式linux几种播放视频方法

    嵌入式linux几种播放视频的方法:交叉编译mplayer、smplayer等软件,移植嵌入式平台。这种
    发表于 11-01 17:38 9次下载
    <b class='flag-5'>嵌入式</b><b class='flag-5'>linux</b>几种播放视频<b class='flag-5'>方法</b>

    嵌入式linux安装qt,嵌入式Linux版本Qt5.4快速部署

    (Toradex Apalis iMX6)基于Embedded Linux快速部署做较详细说明。嵌入式Linux版本Qt5.4快速部署--- by Toradex 秦海
    发表于 11-02 10:51 0次下载
    <b class='flag-5'>嵌入式</b><b class='flag-5'>linux</b>安装<b class='flag-5'>qt</b>,<b class='flag-5'>嵌入式</b><b class='flag-5'>Linux</b>版本<b class='flag-5'>Qt</b>5.4快速部署

    嵌入式Linux路线

    嵌入式linux开发环境搭建、嵌入式linux开发模型、linux内核移植和文件系统、
    发表于 11-02 11:51 18次下载
    <b class='flag-5'>嵌入式</b><b class='flag-5'>Linux</b>路线