首页 > 系统相关 >Linux Qt下MQTT模块的导入(编译成库版本)几乎适用所有版本

Linux Qt下MQTT模块的导入(编译成库版本)几乎适用所有版本

时间:2022-12-20 17:37:51浏览次数:72  
标签:Qt lib 编译成 client master build 版本 源码 目录


Linux Qt下MQTT模块的导入(编译成库版本)几乎适用所有版本

  • ​​前言​​
  • ​​MQTT 源码下载​​
  • ​​一、采用windows共享文件编译出错(ln: 无法创建符号链接 lib*.so : 不支持的操作)​​
  • ​​二、将下载的mqtt-master拷贝到ubunut下,这里我cp到桌面:​​
  • ​​1.进入到qmqtt-master目录​​
  • ​​2.修改 .qmake.conf 如下:​​
  • ​​3.创建 build目录 mkdir build/​​
  • ​​4.进入 build目录 执行 qmake .. --> make -j4​​
  • ​​5.编译完成​​
  • ​​二、导入工程验证​​
  • ​​1.新建QmqttDemo工程​​
  • ​​2.在工程目录下创建 lib目录​​
  • ​​2.1 将如图文件拷贝到新建的lib目录下​​
  • ​​3.新建include 将qmqtt-master/src/mqtt所有.h拷贝到 QmqttDemo/lib/include 下​​
  • ​​4.通过工程配置qmqtt库 ---- QmqttDemo.pro 内容如下:​​
  • ​​5 关键代码​​
  • ​​三、验证结果​​
  • ​​源码工程​​

Windows下 MQTT源码移植(几乎所有的Qt版本都适用) ​​链接​​ Linux Qt下MQTT模块的导入(源码移植) 链接
Qt下MQTT模块的导入(源码直接导入)适用Windows和Linux系统 连接

前言

环境:ubuntu16.04
Qt版本:5.12.9


提示:以下是本篇文章正文内容,下面案例可供参考

MQTT 源码下载

​下载地址​​ ------下载的要是mqtt-master

一、采用windows共享文件编译出错(ln: 无法创建符号链接 lib*.so : 不支持的操作)

Linux Qt下MQTT模块的导入(编译成库版本)几乎适用所有版本_Qt

由于在linux下编译dll工程时,无法生成*.so、.so.5、.so.5.12文件,只生成了*.so.5.12.9。报的错误是“ ln: 无法创建符号链接’lib*.so’: 不支持的操作”。
这个错误原因是:windows只能在NTFS文件系统创建硬链接,而且只有在同一文件系统中的文件才能创建硬链接。编译的dll工程源代码放在了windows和linux虚拟机的共享目录里。共享目录所在的文件系统和linux的文件系统并不是同一个文件系统,故而不能创建硬链接。将dll工程源代码移动到linux系统的文件夹中即可解决。

二、将下载的mqtt-master拷贝到ubunut下,这里我cp到桌面:

cp -R qmqtt-master/ ~/Desktop/

Linux Qt下MQTT模块的导入(编译成库版本)几乎适用所有版本_文件系统_02

1.进入到qmqtt-master目录

cd qmqtt-master/

2.修改 .qmake.conf 如下:

load(qt_build_config)
CONFIG += warning_clean
MODULE_VERSION = 5.12.9

Linux Qt下MQTT模块的导入(编译成库版本)几乎适用所有版本_文件系统_03

3.创建 build目录 mkdir build/

mkdir build/
cd build/

Linux Qt下MQTT模块的导入(编译成库版本)几乎适用所有版本_文件系统_04

4.进入 build目录 执行 qmake … --> make -j4

qmake .. 
make -j4

Linux Qt下MQTT模块的导入(编译成库版本)几乎适用所有版本_文件系统_05


Linux Qt下MQTT模块的导入(编译成库版本)几乎适用所有版本_Qt_06

5.编译完成

Linux Qt下MQTT模块的导入(编译成库版本)几乎适用所有版本_linux_07


Linux Qt下MQTT模块的导入(编译成库版本)几乎适用所有版本_QtMqtt_08

二、导入工程验证

1.新建QmqttDemo工程

Linux Qt下MQTT模块的导入(编译成库版本)几乎适用所有版本_linux_09


Linux Qt下MQTT模块的导入(编译成库版本)几乎适用所有版本_Qt_10


Linux Qt下MQTT模块的导入(编译成库版本)几乎适用所有版本_文件系统_11


Linux Qt下MQTT模块的导入(编译成库版本)几乎适用所有版本_linux_12


Linux Qt下MQTT模块的导入(编译成库版本)几乎适用所有版本_QtMqtt_13


Linux Qt下MQTT模块的导入(编译成库版本)几乎适用所有版本_linux_14


Linux Qt下MQTT模块的导入(编译成库版本)几乎适用所有版本_文件系统_15


Linux Qt下MQTT模块的导入(编译成库版本)几乎适用所有版本_QtMqtt_16

2.在工程目录下创建 lib目录

Linux Qt下MQTT模块的导入(编译成库版本)几乎适用所有版本_Qt_17

2.1 将如图文件拷贝到新建的lib目录下

Linux Qt下MQTT模块的导入(编译成库版本)几乎适用所有版本_QtMqtt_18


Linux Qt下MQTT模块的导入(编译成库版本)几乎适用所有版本_Qt_19

3.新建include 将qmqtt-master/src/mqtt所有.h拷贝到 QmqttDemo/lib/include 下

Linux Qt下MQTT模块的导入(编译成库版本)几乎适用所有版本_linux_20

4.通过工程配置qmqtt库 ---- QmqttDemo.pro 内容如下:

QT += core gui network
INCLUDEPATH += lib/include
#这里很重要,没有它会报头文件找不到错误

QT       += core gui network

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

CONFIG += c++11

DEFINES += QT_DEPRECATED_WARNINGS

SOURCES += \
main.cpp \
widget.cpp

HEADERS += \
widget.h



FORMS += \
widget.ui

INCLUDEPATH += lib/include

#LIBS+= -L/usr/local/lib \
LIBS+= -L/$$PWD/lib \
-lQt5Qmqtt

# Default rules for deployment.
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target

5 关键代码

void Widget::clientMqtt(){
client = new QMQTT::Client(); // 初始化QMQTT客户指针

connect(client, SIGNAL(received(QMQTT::Message)),this, SLOT(onMQTT_Received(QMQTT::Message)));

oneNet server ///
QHostAddress host("183.230.40.39"); // 代理服务器 IP
QByteArray password = "test"; // 设备名称
quint16 port = 6002; // 代理服务器端口
QString deviceId = "604***658"; // 设备 ID
QString productId = "354*15"; // 产品 ID

client->setKeepAlive(120); // 心跳
client->setHost(host); // 设置 EMQ 代理服务器
client->setPort(port); // 设置 EMQ 代理服务器端口
client->setClientId(deviceId); // 设备 ID
client->setUsername(productId); // 产品 ID
client->setPassword(password);
client->cleanSession();
client->setVersion(QMQTT::MQTTVersion::V3_1_1); // 设置mqtt版本


client->connectToHost(); // 连接 EMQ 代理服务器

QTimer::singleShot(1000, this, [=](){
client->subscribe("abcd",0); // 订阅abcd
});
}

void Widget::onMQTT_Received( QMQTT::Message message) {
QString str = message.payload();
qDebug() <<"rcive: " << message.topic() << ":" <<str;

}

三、验证结果

  1. 发布 pulish

    2.received

源码工程

Linux Qt下MQTT模块的导入(编译成库版本)几乎适用所有版本_Qt_21


Linux Qt下MQTT模块的导入(编译成库版本)几乎适用所有版本_QT_22

源码工程下载 ​​下载​​


标签:Qt,lib,编译成,client,master,build,版本,源码,目录
From: https://blog.51cto.com/u_15918664/5956343

相关文章