目录
前言
一、前期准备
1.1 获取mqtt库
1.2 安装openssl
1.3 安装cmake-gui
二、生成C工程代码
三、编译C库
3.1 创建工程目录
3.2 修改输出目录
四、生成C++工程代码
五、编译C++库
5.1 创建工程目录
5.2 修改输出目录
六、新建MQTT工程
6.1 创建文件夹
6.2 拷贝所需头文件和库文件
七、配置工程
7.1 配置预处理器
7.2 包含头文件目录
7.3 包含lib目录
7.4 添加依赖项lib库
八、报错
8.1 没有正确配置预处理器
8.2 缺少paho-mqttpp3.lib
8.3 缺少ws2_32.lib库
8.4 找不到paho-mqttpp3.dll
九、参考资料
十、示例工程下载
最近C++编程,需要用到mqtt,之前python编程时用到的mqtt库时paho的,于是乎,上GitHub找了paho的mqtt的c源码库。
编程环境:win10
工具:Visual Studio 2019
由于网上看到的教程是VS2015的,没有VS2019的,而且好像编译过程也有点不一样,因此写下这篇笔记,当作给自己的记录。也可以给其他人参考一下。
先git clone下来https://github.com/eclipse/paho.mqtt.c.git
https://github.com/eclipse/paho.mqtt.cpp.git
我把源码下载在F:/学习笔记/C++/目录下,这里时两个库,一个是C源码库,一个是cpp源码库,cpp源码库的编译要基于c源码库。
Windows要安装openssl,选择开发人员版本的openssl进行下载(即那个比较大的安装包)
https://slproweb.com/download/Win64OpenSSL-1_1_1d.exe
我把openssl安装在C:/Program Files/OpenSSL-Win64/
安装包地址
https://github.com/Kitware/CMake/releases/download/v3.16.2/cmake-3.16.2-win64-x64.msi
源码目录选择,paho.mqtt.c目录,F:/学习笔记/C++/mqtt/paho.mqtt.c
源码生成build目录选择你自己要生成的目录路径,这里我是在源码目录下新建了一个build目录
F:/学习笔记/C++/paho.mqtt.c/build
选择好路径之后,点击“configure”
按下图打勾,然后点击“configure”
会报错如下
这是因为缺少openssl的路径,如下图,添加好openssl对应的文件目录
OPENSSL_CRYPTO_LIB=C:/Program Files/OpenSSL-Win64/lib/libcrypto.lib
OPENSSL_INCLUDE_DIR=C:/Program Files/OpenSSL-Win64/include
OPENSSL_LIB=C:/Program Files/OpenSSL-Win64/lib/libssl.lib
C:/Program Files/OpenSSL-Win64/是我的openssl安装目录
选择完成后重新“Configure”就不会报错了,然后接着点“Generate”
你会发现在你的build目录下已经生成了一个工程了。
在源码目录下创建新的文件夹install/bin/
既是F:\学习笔记\C++\paho.mqtt.c\install\bin
所有生成的文件都放在\install\bin
双击打开Eclipse Paho C.sln
然后右键每个子项目,把路径给修改成为刚刚新创建的install/bin/这个目录下面,当然你可以自定义你的目录,但是必须确保你的输出文件都在同一个目录下面。
配置完成之后右键All Build进行生成
在此处打开powershell窗口,运行MQTTVersion.exe
在原来的窗口输入.\paho_c_sub.exe -t "baiyu" -h test.mosquitto.org
新建一个窗口,输入.\paho_c_pub.exe -t "baiyu" -h test.mosquitto.org
然后新窗口发送的数据可以直接在原来窗口接收到。
至此,paho-mqtt-c库和例程编译完成。
生成C++工程代码与生成C工程代码方法类似。都是在原来的源代码目录下面新建一个build目录
会报错如下图所示,这是因为生成C++库需要用到上面生成的C的lib库
F:/学习笔记/C++/paho.mqtt.c/src 这个目录是源码头文件的库
F:/学习笔记/C++/paho.mqtt.c/install/bin/paho-mqtt3as.lib 这个lib是c编译出来的库
然后点击“Generate”进行生成
同样是在源代码目录下面新建一个install/bin目录
然后打开工程paho-mqtt-cpp.sln
修改完毕进行All build进行编译生成
设为启动项目
运行后会在等待消息的到来,打开咱们一开始的那个发布消息的窗口,发送消息,你就可以收到了,这说明你的C++客户端编译成功了。
进入工程目录下
在include目录下新建两个文件夹
在lib目录下,
添加paho-mqtt3as.lib
添加paho-mqttpp3.lib
新建文件,然后把paho.mqtt.cpp的async_consume.cpp源码拷贝过来,右键生成,进行编译
然后调试运行
说明新建的工程起作用了!!!
自己要调用mqtt的库就这么做即可。
配置好预处理器 “WIN64”即可
错误,LNK2019 无法解析的外部符号 "public: __cdecl mqtt::connect_options::connect_options(void)" (??0connect_options@mqtt@@QEAA@XZ),该符号在函数 main 中被引用
问题:缺少paho-mqttpp3.lib
解决方法:文件最开始的位置添加#pragma comment(lib, " paho-mqttpp3.lib ")
或者“右键工程->属性->链接器->输入->附加依赖项”
错误 LNK2019 无法解析的外部符号 __imp_htons,该符号在函数 WebSocket_close 中被引用
解决方法:在文件最开始的位置添加#pragma comment(lib, "ws2_32.lib")
或者“右键工程->属性->链接器->输入->附加依赖项”
解决方法:
在你编译cpp源码时,会生成paho-mqttpp3.dll
我的paho-mqttpp3.dll所在目录是
F:\学习笔记\C++\paho.mqtt.cpp\install\bin
http://www.brixbot.com/coding/mqtt-04-build-paho-c-for-windows/
鉴于有些小伙伴编译不成功,故把工程打包上传,供大家学习交流。不过,我还是希望大家能按着教程自己动手编译一次。
教程中的编译好的C库工程:
https://download.csdn.net/download/zhh763984017/12195113
教程中的编译好的C库工程:
https://download.csdn.net/download/zhh763984017/12195122
没有积分下载的小伙伴请戳下面的链接:
https://github.com/BaiYu96/VS2019_paho.mqtt.c
https://github.com/BaiYu96/VS2019_paho.mqtt.cpp
当然,我希望有积分的小伙伴支持一下我,嘻嘻,觉得有帮助就给我点个赞,或者留个言吧~