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下来GitHub - eclipse/paho.mqtt.c: An Eclipse Paho C client library for MQTT for Windows, Linux and MacOS. API documentation: https://eclipse.github.io/paho.mqtt.c/
GitHub - eclipse/paho.mqtt.cpp
我把源码下载在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/
PS:
根据粉丝私聊我要上述openssl安装包后,成功跑通本教程,才发现,这里有个openssl的报错是要用到这个对应的openssl才能解决。
鉴于上面这个openssl版本已经下载不了,我已经把对应的程序下载链接放出来
有积分的同学,请戳
openssl_1.1.1d.zip-网络安全文档类资源-CSDN下载
没有积分的同学,请戳
https://pan.baidu.com/s/1me6ayn7PYi6NHER5miOGOQ 提取码:c7iy
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
选择好路径之后,点击“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目录下已经生成了一个工程了。
三、编译C库
3.1 创建工程目录
在源码目录下创建新的文件夹install/bin/
既是F:\学习笔记\C++\paho.mqtt.c\install\bin
所有生成的文件都放在\install\bin
3.2 修改输出目录
双击打开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++工程代码与生成C工程代码方法类似。都是在原来的源代码目录下面新建一个build目录
会报错如下图所示,这是因为生成C++库需要用到上面生成的C的lib库
F:/学习笔记/C++/paho.mqtt.c/src 这个目录是源码头文件的库
F:/学习笔记/C++/paho.mqtt.c/install/bin/paho-mqtt3as.lib 这个lib是c编译出来的库
然后点击“Generate”进行生成
五、编译C++库
5.1 创建工程目录
同样是在源代码目录下面新建一个install/bin目录
5.2 修改输出目录
然后打开工程paho-mqtt-cpp.sln
修改完毕进行All build进行编译生成
设为启动项目
运行后会在等待消息的到来,打开咱们一开始的那个发布消息的窗口,发送消息,你就可以收到了,这说明你的C++客户端编译成功了。
六、新建MQTT工程
6.1 创建文件夹
进入工程目录下
在include目录下新建两个文件夹
6.2 拷贝所需头文件和库文件
在lib目录下,
添加paho-mqtt3as.lib
添加paho-mqttpp3.lib
七、配置工程
7.1 配置预处理器
7.2 包含头文件目录
7.3 包含lib目录
7.4 添加依赖项lib库
新建文件,然后把paho.mqtt.cpp的async_consume.cpp源码拷贝过来,右键生成,进行编译
然后调试运行
说明新建的工程起作用了!!!
自己要调用mqtt的库就这么做即可。
八、报错
8.1 没有正确配置预处理器
配置好预处理器 “WIN64”即可
8.2 缺少paho-mqttpp3.lib
错误,LNK2019 无法解析的外部符号 "public: __cdecl mqtt::connect_options::connect_options(void)" (??0connect_options@mqtt@@QEAA@XZ),该符号在函数 main 中被引用
问题:缺少paho-mqttpp3.lib
解决方法:文件最开始的位置添加#pragma comment(lib, " paho-mqttpp3.lib ")
或者“右键工程->属性->链接器->输入->附加依赖项”
8.3 缺少ws2_32.lib库
错误 LNK2019 无法解析的外部符号 __imp_htons,该符号在函数 WebSocket_close 中被引用
解决方法:在文件最开始的位置添加#pragma comment(lib, "ws2_32.lib")
或者“右键工程->属性->链接器->输入->附加依赖项”
8.4 找不到paho-mqttpp3.dll
解决方法:
在你编译cpp源码时,会生成paho-mqttpp3.dll
我的paho-mqttpp3.dll所在目录是
F:\学习笔记\C++\paho.mqtt.cpp\install\bin
九、参考资料
MQTT什么鬼?第四讲:编译Paho C Windows客户端 – 砖瓦匠
十、示例工程下载
鉴于有些小伙伴编译不成功,故把工程打包上传,供大家学习交流。不过,我还是希望大家能按着教程自己动手编译一次。
教程中的编译好的C库工程:
VS2019编译完成的paho.mqtt.c库_paho.mqtt.c编译-C代码类资源-CSDN下载
教程中的编译好的C库工程:
VS2019编译完成的paho.mqtt.cpp库_paho-mqtt-c编译使用-C++代码类资源-CSDN下载
没有积分下载的小伙伴请戳下面的链接:
GitHub - BaiYu96/VS2019_paho.mqtt.c: This is a VS2019 project of the paho.mqtt.c
GitHub - BaiYu96/VS2019_paho.mqtt.cpp: This is the paho.mqtt.cpp project compiled by VS2019.
当然,我希望有积分的小伙伴支持一下我,嘻嘻,觉得有帮助就给我点个赞,或者留个言吧~
VS2019编译MQTT库 C/C++(超详细,含示例工程)相关推荐
- 【转】Android下编译jni库的二种方法(含示例) -- 不错
原文网址:http://blog.sina.com.cn/s/blog_3e3fcadd01011384.html 总结如下:两种方法是: 1)使用Android源码中的Make系统 2)使用NDK( ...
- msp430流水灯c语言程序,超详细msp430示例程序汇编.doc
超详细msp430示例程序汇编 一.基础_实验[10个] 1.入门试验:LED闪烁(1个) 2.时钟实验:设置MCLK.ACLK.SMCLK(1个) 3.低功耗实验:设置低功耗模式(1个) 4.IO端 ...
- 如何 FFT(快速傅里叶变换) 求幅度、频率(超详细 含推导过程)
目录 如何 FFT(快速傅里叶变换) 求幅度.频率(超详细 含推导过程) 一. 打颗栗子 二. 求幅度 1. 快速傅里叶变换 2. 求出复数的绝对值 3. 归一化 小结 三. 求频率 1. 频率公式 ...
- 使用VS编译mqtt库(一次成功)
1.编译环境:本人使用的是VS2017(平台工具集V141)进行编译的64位版本.主要区别在于平台工具集,例如我编译完成的库,虽然你可能使用VS2015来进行调用,但是如果你的平台工具集也是V141的 ...
- 在Windows下使用vs2019编译libjpeg库
一.库的编译 1.下载 libjpeg 源码,这里我下载的是 jpegsr9e.zip 2.解压源码 3.进入解压后的目录,找到 makefile.vs 文件,用文本编辑器打开并编辑,找到 语句 #! ...
- python学习笔记之numpy库的使用——超详细
文章目录 NumPy介绍 一.如何创建 1.导入Numpy库,并命名为np: 2.查看版本 3.通过列表创建一维数组: 4.通过列表创建二维数组: 5.创建全为0的二维数组 6.创建全为1的三维数组 ...
- STM32平台下官方DMP库6.12超详细移植教程
前记 Motion Driver官方库:Motion_Driver_6.12 STM32工程源码:STM32F103C8-软件MPU6050(DMP) MPU6050软件I2C驱动,带OLED显示,移 ...
- vue - element <upload> 组件批量上传文档,可携带其他表单数据项一同与文件 “手动提交“ 服务器(类似百度文库系统批量上传前端界面与逻辑)超详细教程示例源码,提供界面与逻辑完整源码
效果图 本示例使用的是 element 组件库,其实什么组件库都行(逻辑是一样),只要你是 vue.js 项目就能使用本教程. 本文实现了 vue + element 使用 upload 组件批量上传 ...
- vue3 - 网页大转盘抽奖功能,支持后端接口确定最终奖品,可自定义轮盘宽高、颜色、字号、按钮等等(超详细的示例代码及注释开箱即用,稍微改改就能应用到你的项目中)
效果图 网上的 vue3 教程非常少,找了几篇代码太乱根本无法改造和使用.. 如下图所示,你可以自己 DIY 转盘的大小位置及样式,中奖的商品由后端接口控制, 代码干净只有核心的功能,注释超级详细新手 ...
最新文章
- Postman收费太贵了,我决定用Postwoman...
- 【腾讯Bugly干货分享】经典随机Crash之二:Android消息机制
- buffer cache 深度解析
- php5.2的配置方,Windows IIS PHP 5.2 安装与配置方法
- swiper动态加载数据左右切换失效
- mysql 最短路经_poj 3613 Cow Relays 经L边的最短路 | 学步园
- Golang的4种传递引用类型
- Shell命令对整数求和,每行一个?
- JDBC如何判断数据库的表是否存在
- 著名mybb论坛的汉化步骤
- Myeclipse自定义包自动加入
- 春季高考计算机专业专业分值,春季高考总分多少 分值分布情况如何
- 国二考试报Wps还是c语言,2021 年全国计算机二级增考 WPS Office
- 9550电机_电机扭矩计算公式里面的9550*P是怎么得来的?
- macOS safari安装第三方插件
- 华为云OBS创建对象时以HTTP方式通知订阅终端
- 我经常关注的博客 - 黎波 - 博客园
- 雅马哈机器人编程讲解_雅马哈机器人RCX编程手册
- Unity3D--加载界面、开始界面
- 无边落木萧萧下,不尽长江滚滚来。