VS2019编译MQTT库 C/C++(超详细,含示例工程)

目录

目录

前言

一、前期准备

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的,而且好像编译过程也有点不一样,因此写下这篇笔记,当作给自己的记录。也可以给其他人参考一下。

一、前期准备

1.1 获取mqtt库

先git clone下来https://github.com/eclipse/paho.mqtt.c.git

https://github.com/eclipse/paho.mqtt.cpp.git

我把源码下载在F:/学习笔记/C++/目录下,这里时两个库,一个是C源码库,一个是cpp源码库,cpp源码库的编译要基于c源码库。

1.2 安装openssl

Windows要安装openssl,选择开发人员版本的openssl进行下载(即那个比较大的安装包)

https://slproweb.com/download/Win64OpenSSL-1_1_1d.exe

我把openssl安装在C:/Program Files/OpenSSL-Win64/

1.3 安装cmake-gui

安装包地址

https://github.com/Kitware/CMake/releases/download/v3.16.2/cmake-3.16.2-win64-x64.msi

二、生成C工程代码

源码目录选择,paho.mqtt.c目录,F:/学习笔记/C++/mqtt/paho.mqtt.c

源码生成build目录选择你自己要生成的目录路径,这里我是在源码目录下新建了一个build目录

F:/学习笔记/C++/paho.mqtt.c/build

VS2019编译MQTT库 C/C++(超详细,含示例工程)_第1张图片

选择好路径之后,点击“configure”

VS2019编译MQTT库 C/C++(超详细,含示例工程)_第2张图片

按下图打勾,然后点击“configure”

VS2019编译MQTT库 C/C++(超详细,含示例工程)_第3张图片

会报错如下

VS2019编译MQTT库 C/C++(超详细,含示例工程)_第4张图片

这是因为缺少openssl的路径,如下图,添加好openssl对应的文件目录

VS2019编译MQTT库 C/C++(超详细,含示例工程)_第5张图片

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”

VS2019编译MQTT库 C/C++(超详细,含示例工程)_第6张图片

你会发现在你的build目录下已经生成了一个工程了。

VS2019编译MQTT库 C/C++(超详细,含示例工程)_第7张图片

三、编译C库

3.1 创建工程目录

在源码目录下创建新的文件夹install/bin/

既是F:\学习笔记\C++\paho.mqtt.c\install\bin

所有生成的文件都放在\install\bin

 

VS2019编译MQTT库 C/C++(超详细,含示例工程)_第8张图片

3.2 修改输出目录

双击打开Eclipse Paho C.sln

然后右键每个子项目,把路径给修改成为刚刚新创建的install/bin/这个目录下面,当然你可以自定义你的目录,但是必须确保你的输出文件都在同一个目录下面。

VS2019编译MQTT库 C/C++(超详细,含示例工程)_第9张图片

配置完成之后右键All Build进行生成

VS2019编译MQTT库 C/C++(超详细,含示例工程)_第10张图片

在此处打开powershell窗口,运行MQTTVersion.exe

VS2019编译MQTT库 C/C++(超详细,含示例工程)_第11张图片

在原来的窗口输入.\paho_c_sub.exe -t "baiyu" -h test.mosquitto.org

新建一个窗口,输入.\paho_c_pub.exe -t "baiyu" -h test.mosquitto.org

然后新窗口发送的数据可以直接在原来窗口接收到。

VS2019编译MQTT库 C/C++(超详细,含示例工程)_第12张图片

至此,paho-mqtt-c库和例程编译完成。

四、生成C++工程代码

生成C++工程代码与生成C工程代码方法类似。都是在原来的源代码目录下面新建一个build目录

VS2019编译MQTT库 C/C++(超详细,含示例工程)_第13张图片

会报错如下图所示,这是因为生成C++库需要用到上面生成的C的lib库

VS2019编译MQTT库 C/C++(超详细,含示例工程)_第14张图片

F:/学习笔记/C++/paho.mqtt.c/src 这个目录是源码头文件的库

F:/学习笔记/C++/paho.mqtt.c/install/bin/paho-mqtt3as.lib   这个lib是c编译出来的库

VS2019编译MQTT库 C/C++(超详细,含示例工程)_第15张图片

VS2019编译MQTT库 C/C++(超详细,含示例工程)_第16张图片

然后点击“Generate”进行生成

VS2019编译MQTT库 C/C++(超详细,含示例工程)_第17张图片

五、编译C++库

5.1 创建工程目录

同样是在源代码目录下面新建一个install/bin目录

5.2 修改输出目录

然后打开工程paho-mqtt-cpp.sln

VS2019编译MQTT库 C/C++(超详细,含示例工程)_第18张图片

VS2019编译MQTT库 C/C++(超详细,含示例工程)_第19张图片

修改完毕进行All build进行编译生成

VS2019编译MQTT库 C/C++(超详细,含示例工程)_第20张图片

设为启动项目

VS2019编译MQTT库 C/C++(超详细,含示例工程)_第21张图片

运行后会在等待消息的到来,打开咱们一开始的那个发布消息的窗口,发送消息,你就可以收到了,这说明你的C++客户端编译成功了。

VS2019编译MQTT库 C/C++(超详细,含示例工程)_第22张图片

六、新建MQTT工程

VS2019编译MQTT库 C/C++(超详细,含示例工程)_第23张图片

VS2019编译MQTT库 C/C++(超详细,含示例工程)_第24张图片

6.1 创建文件夹

进入工程目录下

VS2019编译MQTT库 C/C++(超详细,含示例工程)_第25张图片

include目录下新建两个文件夹

VS2019编译MQTT库 C/C++(超详细,含示例工程)_第26张图片

6.2 拷贝所需头文件和库文件

VS2019编译MQTT库 C/C++(超详细,含示例工程)_第27张图片

VS2019编译MQTT库 C/C++(超详细,含示例工程)_第28张图片

 

在lib目录下,

添加paho-mqtt3as.lib

VS2019编译MQTT库 C/C++(超详细,含示例工程)_第29张图片

 

添加paho-mqttpp3.lib

七、配置工程

7.1 配置预处理器

VS2019编译MQTT库 C/C++(超详细,含示例工程)_第30张图片

7.2 包含头文件目录

VS2019编译MQTT库 C/C++(超详细,含示例工程)_第31张图片

7.3 包含lib目录

VS2019编译MQTT库 C/C++(超详细,含示例工程)_第32张图片

7.4 添加依赖项lib库

VS2019编译MQTT库 C/C++(超详细,含示例工程)_第33张图片

新建文件,然后把paho.mqtt.cpp的async_consume.cpp源码拷贝过来,右键生成,进行编译

VS2019编译MQTT库 C/C++(超详细,含示例工程)_第34张图片

然后调试运行

VS2019编译MQTT库 C/C++(超详细,含示例工程)_第35张图片

说明新建的工程起作用了!!!

自己要调用mqtt的库就这么做即可。

八、报错

8.1 没有正确配置预处理器

VS2019编译MQTT库 C/C++(超详细,含示例工程)_第36张图片

 

VS2019编译MQTT库 C/C++(超详细,含示例工程)_第37张图片

配置好预处理器 “WIN64”即可

VS2019编译MQTT库 C/C++(超详细,含示例工程)_第38张图片

8.2 缺少paho-mqttpp3.lib

错误,LNK2019 无法解析的外部符号 "public: __cdecl mqtt::connect_options::connect_options(void)" (??0connect_options@mqtt@@QEAA@XZ),该符号在函数 main 中被引用

VS2019编译MQTT库 C/C++(超详细,含示例工程)_第39张图片

问题:缺少paho-mqttpp3.lib

解决方法:文件最开始的位置添加#pragma comment(lib, " paho-mqttpp3.lib ")

或者“右键工程->属性->链接器->输入->附加依赖项”

8.3 缺少ws2_32.lib库

错误      LNK2019      无法解析的外部符号 __imp_htons,该符号在函数 WebSocket_close 中被引用

VS2019编译MQTT库 C/C++(超详细,含示例工程)_第40张图片

解决方法:在文件最开始的位置添加#pragma comment(lib, "ws2_32.lib")

或者“右键工程->属性->链接器->输入->附加依赖项”

8.4 找不到paho-mqttpp3.dll

VS2019编译MQTT库 C/C++(超详细,含示例工程)_第41张图片

解决方法:

在你编译cpp源码时,会生成paho-mqttpp3.dll

我的paho-mqttpp3.dll所在目录是

F:\学习笔记\C++\paho.mqtt.cpp\install\bin

VS2019编译MQTT库 C/C++(超详细,含示例工程)_第42张图片

九、参考资料

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

当然,我希望有积分的小伙伴支持一下我,嘻嘻,觉得有帮助就给我点个赞,或者留个言吧~

你可能感兴趣的:(C/C++学习笔记)