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下编译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/
1.进入到qmqtt-master目录
cd qmqtt-master/
2.修改 .qmake.conf 如下:
load(qt_build_config)
CONFIG += warning_clean
MODULE_VERSION = 5.12.9
3.创建 build目录 mkdir build/
mkdir build/
cd build/
4.进入 build目录 执行 qmake … --> make -j4
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 内容如下:
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;
}
三、验证结果
- 发布 pulish
2.received
源码工程
源码工程下载 下载