Ubuntu 18.04+QT5.14安装QtMqtt模块
前言:
如果你要移植到开发板,也是同样的方法,根据你的QT 交叉编译kit更换类似函数(比如我板子的QT交叉编译kit是4.8,虚拟机的QT编译kit版本是5.14)
,然后把生成的文件扔进对应kit的include
和lib
等文件夹里。后续写完程序用交叉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>
若有不正确的地方,请各位不吝赐教!