centos下基于Qt5.12.1的mqtt编译及示例

centos下基于Qt5.12.1的mqtt编译及示例

前言

Qmqtt是对mqtt协议的一个轻量级实现,在qt5.10之后,纳入qt官方支持,但是在开源免费的qt版本中并不发布该库,因此需要手动的对Qmqtt库进行编译、安装,然后才能使用。
编译过程中遇到很多小问题,一一解决并记录了下来。

  1. qt版本选择。从最开始的qt5.6,升为qt5.13.1,发现该版本以取消了mysql驱动库的发布,需要自行编译,在centos下涉及到mysql安装、qt源代码安装等系列操作,因此降级为Qt5.12.0。在运行程序的时候,发现该版本的qt在QCoreApplication工程下使用gcc4.8存在编译bug,遂最终确定qt版本为Qt5.12.1。
  2. qmqtt代码版本的选择。 因为qt版本众多,所以与之适配的qmqtt库也存在众多分支,此处选择的是5.12版本
  3. qmqtt编译问题。在qmqtt的编译过程中,遇到编译器报错:unrecognized command line option ‘-Wdate-time’。经查是因为gcc版本过低,所以进行了centos7下的gcc升级,从4.8升级为gcc5.4。

gcc5.4的安装

安装gcc

yum install gcc -y

安装g++

yum install gcc-c++ -y

下载gcc-5.4.0安装包,该过程较长,可手动使用浏览器下载。

wget http://ftp.tsukuba.wide.ad.jp/software/gcc/releases/gcc-5.4.0/gcc-5.4.0.tar.bz2

解压

tar -xvf gcc-5.4.0.tar.bz2

下载编译依赖项,很慢,只能等待。

cd gcc-5.4.0
./contrib/download_prerequisites

建立编译输出目录

mkdir build
cd build

生成Makefile文件

../configure -prefix=/usr/local --enable-checking=release --enable-languages=c,c++ --disable-multilib

开始编译,持续时间较长,编译完成进行安装

make
make install

重建软连接

cd /usr/bin/
mv gcc gcc_back
mv g++ g++_back
ln -s /usr/local/bin/gcc gcc
ln -s /usr/local/bin/g++ g++

替换老的依赖库:

find / -name "libstdc++.so*"

得到下图,高亮部分为新库:
Alt
重建软链接

cp /gcc-5.4.0/build/stage1-x86_64-unknown-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6.0.21 /usr/lib64
rm -rf libstdc++.so.6
ln -s libstdc++.so.6.0.21 libstdc++.so.6

重启,安装升级完毕。

Qmqtt 安装编译

下载

git clone git://code.qt.io/qt/qtmqtt.git

然后checkout到5.12版本,然后运行如下命令

/opt/Qt5.12.1/5.12.1/gcc_64/bin/qmake
make
make install

此时已经安装成功,在/opt/Qt5.12.1/5.12.1/gcc_64/lib目录下就可以看到编译好的库了。
使用时只需要在工程文件下添加:

QT  += mqtt

就可以正常使用Qmqtt库了。

Qmqtt的demo实例

此处仅研究QmqttClient的使用,例子参见代码中自带的Examples目录,在其中选择simpleclient工程编译运行,实现了基本的连接、订阅、发布消息功能。效果如下:

在这里插入图片描述

注意

在使用的过程中,发现如果QmqttClient对象是在主线程中创建,在子线程中发送消息时,会报错:QSocketNotifier: Socket notifiers cannot be enabled or disabled from another thread
但是如果在子线程内创建QmqttClient对象并发送消息,会提示一直在连接中,始终未能连接成功。

那么只能在主线程中创建对象,在主线程中发送消息。消息内容从其他子线程通过信号槽返回到主线程即可。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Qmqtt是对mqtt协议的一个轻量级实现,需要手动编译安装才能在Qt中使用。在编译过程中可能会遇到一些问题。首先,需要选择适配的Qt版本。根据引用\[1\]中的描述,作者最终选择了Qt5.12.1版本。其次,还需要选择适配的qmqtt代码版本。根据引用\[1\]中的描述,作者选择了适配Qt5.12版本的qmqtt编译问题。在编译过程中,可能会遇到编译器报错的问题,如引用\[1\]中提到的"unrecognized command line option ‘-Wdate-time’"。这个问题可能是由于gcc版本过低导致的,可以尝试升级gcc版本。根据引用\[1\]中的描述,作者在CentOS 7下将gcc版本从4.8升级到了gcc5.4。另外,根据引用\[2\]和引用\[3\]的描述,编译Qt和qmqtt的过程中需要下载Qt的源码,并进行相应的配置和安装。可以从Qt官方网站下载源码,并按照引用\[2\]和引用\[3\]中的描述进行操作。总结来说,要在CentOS 7上编译安装Qt、qmqtt以及mqtt相关的库,需要选择适配的Qt版本,下载Qt的源码,并进行相应的配置和安装。在编译过程中可能会遇到一些问题,需要根据具体情况进行解决。 #### 引用[.reference_title] - *1* [centos下基于Qt5.12.1mqtt编译示例](https://blog.csdn.net/liuyufeng509/article/details/102813228)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [CentOS编译安装QtQt可使用静态编译编译器)](https://blog.csdn.net/nicedante/article/details/106584997)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值