前言

正在写测试程序,在github上找到了一个工程TT3.
TT3是一个mqtt客户端工程,试了一下作者在github项目中提供的编译好exe, 可以正常订阅和发布mqtt消息.

这工程是用vs2010 MFC写的。
我本本上现在装的是VS2017, 试了一下用VS2017是无法编译这个工程的,好多报错(MFC头文件找不到, 估计是VS2017的头文件都变了)。

重新在win10x64最新版上安装了VS2010旗舰版 + vs2010SP1补丁, 装的很顺畅。

安装完VS2010, 开始编译这个工程。也是报错。原因是作者使用了第三方mqtt库,但是他没有将第三方库包含进来。

修正了一下,将第三方库包含进来,编译过了,使用正常(订阅,发送mqtt消息), 给刚入门mqtt编程,想用C操作mqtt的同学用,也包括以后的我自己:)

编译过的工程下载点

csdn下载点:TT3_for_study_to_csdn_2021_0930_1632.zip

试验过程

原始工程git地址: https://github.com/francoisvdm/TT3.git
先将工程迁出到本地试验目录

TT3的使用测试

工程迁出后,作者提供了编译好的exe, 先试试。如果包含自己想要的功能,再编译工程,再研究自己关心的知识点。

TT3.exe是作者编译好的, 先试试。
最后要用第三方的mqtt服务器,先自己搭了一个远程mqtt服务器用于测试。搭建和使用mqtt服务器过程见mqtt服务器(mosquitto)测试环境的搭建
先在远程计算机上启动mqtt服务器。
先用第三方工具在本地订阅远程mqtt服务器上的消息,向远程mqtt服务器发送消息,如果能订阅到消息,说明远程mqtt服务器是好的。
测试订阅消息

mosquitto_sub -h 192.168.1.8 -p 39999 -u user1 -P pwd1 -t 'test/topic' -v

发送消息

mosquitto_pub -h 192.168.1.8 -p 39999 -u user1 -P pwd1 -t 'test/topic' -m "hello mqtt"

如果mqtt服务器本身是好的,可以访问,就测试一下TT3作者编译好的exe.

运行TT3, 进行mqtt消息的订阅和发布测试。

我装vs2010之前测试过,作者提供的TT3是能正常运行和进行mqtt操作的。
但是,装完vs2010之后,直接运行TT3连接服务器失败。提示为"未知错误"。

那先编译完TT3,再试试。

编译TT3工程

打开vs2010, 打开TT3.vcxproj。
出现警告和错误。
先将常见警告去掉

警告   2   warning C4996: 'strcpy': This function or variable may be unsafe. Consider using strcpy_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.  d:\3rd_prj_checkout\mqtt\tt3_for_study\tt3\tt3.cpp  71  1   TT3

在预编译器中加入 _CRT_SECURE_NO_WARNINGS
再编译

警告   2   warning C4800: “int”: 将值强制为布尔值“true”或“false”(性能警告)  d:\3rd_prj_checkout\mqtt\tt3_for_study\tt3\replay.cpp   44  1   TT3
警告  3   warning C4996: 'itoa': The POSIX name for this item is deprecated. Instead, use the ISO C++ conformant name: _itoa. See online help for details.    d:\3rd_prj_checkout\mqtt\tt3_for_study\tt3\exer.cpp 218 1   TT3
警告  4   warning C4101: “pszTimestamp”: 未引用的局部变量 d:\3rd_prj_checkout\mqtt\tt3_for_study\tt3\exer.cpp 209 1   TT3
警告  5   warning C4101: “pszTopic”: 未引用的局部变量 d:\3rd_prj_checkout\mqtt\tt3_for_study\tt3\exer.cpp 209 1   TT3
警告  6   warning C4101: “pszMessage”: 未引用的局部变量   d:\3rd_prj_checkout\mqtt\tt3_for_study\tt3\exer.cpp 209 1   TT3
警告  7   warning C4101: “pItem”: 未引用的局部变量    d:\3rd_prj_checkout\mqtt\tt3_for_study\tt3\exer.cpp 208 1   TT3
警告  8   warning C4101: “pszActive”: 未引用的局部变量    d:\3rd_prj_checkout\mqtt\tt3_for_study\tt3\exer.cpp 209 1   TT3
警告  9   warning C4101: “psInterval”: 未引用的局部变量   d:\3rd_prj_checkout\mqtt\tt3_for_study\tt3\exer.cpp 209 1   TT3
警告  10  warning C4101: “pszRandom”: 未引用的局部变量    d:\3rd_prj_checkout\mqtt\tt3_for_study\tt3\exer.cpp 209 1   TT3
警告  11  warning C4996: 'itoa': The POSIX name for this item is deprecated. Instead, use the ISO C++ conformant name: _itoa. See online help for details.    d:\3rd_prj_checkout\mqtt\tt3_for_study\tt3\alert.cpp    141 1   TT3
警告  12  warning C4101: “pszFreq”: 未引用的局部变量  d:\3rd_prj_checkout\mqtt\tt3_for_study\tt3\alert.cpp    132 1   TT3
警告  13  warning C4101: “pszSearch”: 未引用的局部变量    d:\3rd_prj_checkout\mqtt\tt3_for_study\tt3\alert.cpp    132 1   TT3
警告  14  warning C4101: “pItem”: 未引用的局部变量    d:\3rd_prj_checkout\mqtt\tt3_for_study\tt3\alert.cpp    131 1   TT3
警告  15  warning C4101: “pszActive”: 未引用的局部变量    d:\3rd_prj_checkout\mqtt\tt3_for_study\tt3\alert.cpp    132 1   TT3
警告  16  warning C4101: “pszDuration”: 未引用的局部变量  d:\3rd_prj_checkout\mqtt\tt3_for_study\tt3\alert.cpp    132 1   TT3
警告  17  warning C4101: “pszExecute”: 未引用的局部变量   d:\3rd_prj_checkout\mqtt\tt3_for_study\tt3\alert.cpp    132 1   TT3

C++ => 高级 => 禁用特定警告,加入4800;4996;4101;

再编译,就剩下一个错误。

错误   1   error C1083: 无法打开包括文件:“MQTTClient.h”: No such file or directory d:\3rd_prj_checkout\mqtt\tt3_for_study\tt3\tt3dlg.cpp   8   1   TT3

结合 缺MQTTClient.h 和 工程中有 paho-mqtt3c.dll,到网上查到这个mqtt组件是 paho.mqtt.c, 项目发布的git 地址是 https://github.com/eclipse/paho.mqtt.c/releases

将 eclipse-paho-mqtt-c-win64-1.3.9.zip 和 eclipse-paho-mqtt-c-win32-1.3.9.zip 下载下来,给以后的x64/x86工程用。

TT3的工程配置是x86的, 将eclipse-paho-mqtt-c-win32-1.3.9.zip解压开,放到工程目录中,改名为paho_mqtt

在工程中添加附加包含路径为 .\paho_mqtt\include
在工程中添加附加库目录为 .\paho_mqtt\lib
再编译,工程已经编译过,还有3个警告

警告   1   warning C4244: “参数”: 从“time_t”转换到“int”,可能丢失数据    d:\3rd_prj_checkout\mqtt\tt3_for_study\tt3\tt3dlg.cpp   133 1   TT3
警告  2   warning C4244: “参数”: 从“time_t”转换到“int”,可能丢失数据    d:\3rd_prj_checkout\mqtt\tt3_for_study\tt3\tt3dlg.cpp   608 1   TT3
警告  3   warning C4244: “参数”: 从“double”转换到“DWORD”,可能丢失数据  d:\3rd_prj_checkout\mqtt\tt3_for_study\tt3\tt3dlg.cpp   1486    1   TT3``
`
C++ => 高级 => 禁用特定警告,加入4244;
再编译,过了```bash
1>  TT3.vcxproj -> D:\3rd_prj_checkout\mqtt\TT3_for_study\TT3\Debug\TT3.exe
========== 全部重新生成: 成功 1 个,失败 0 个,跳过 0 个 ==========
将.\paho_mqtt\lib中的dll, 拷贝到Debug目录下,使mqtt组件的dll和生成的TT3.exe同级目录。## 测试TT3的使用## 连接mqtt服务器
自己建立的远程mqtt服务器参数,已经用公版的测试工具测试过了。
将这些参数填入右边的参数框(client id处不能为空,填自己要操作的topic名称 e.g. test/topic), 点击连接,可以看到左下角的提示说已经连接。
![在这里插入图片描述](https://img-blog.csdnimg.cn/7fcebda3b68d421996892493577ddf46.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBATG9zdFNwZWVk,size_20,color_FFFFFF,t_70,g_se,x_16)## 订阅mqtt消息
填入topic名称,点击订阅,当订阅成功时,在右上角的订阅框中出现订阅的主题
![在这里插入图片描述](https://img-blog.csdnimg.cn/fecaed2de259439ba04f19e884ec18e7.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBATG9zdFNwZWVk,size_20,color_FFFFFF,t_70,g_se,x_16)## 发送消息
填入消息,点击发布,可以看到下方有发送成功的信息,可以看到上方有订阅到的消息已经到达。
![在这里插入图片描述](https://img-blog.csdnimg.cn/a5c7a9e42f374a4aa5d3763f22039c62.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBATG9zdFNwZWVk,size_20,color_FFFFFF,t_70,g_se,x_16)
至于为什么装vs2010之前,可以正常运行作者编译好的TT3.exe.
而装vs2010之后,运行TT3.exe不能正常连接远程mqtt服务器的问题。估计就是vs2010运行时库的事情了,这是小事情,等发布时,带个vs2010运行时库的安装程序就行。

mqtt - github上的TT3工程编译相关推荐

  1. 将github上的安卓工程导入本地Android Studio并运行项目

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一.项目内容和集成开发环境介绍 二.使用步骤 1.下载开源项目 2.将项目导入到Android Studio 三.真机 ...

  2. 关于编译GITHUB上的工程

    对于WINDOWS用户,很多人都不习惯使用cmake或makefile编译工程,对于GITHUB上的工程如何编译成熟悉的visual studio文件常常感到困难. 而且,GITHUB上的不少工程本身 ...

  3. 如何使用msysgit上传本地工程到GitHub

    2017年4月12日 10:22PM 使用GitHub上传管理自己的项目是一件十分方便的事情,GitHub可以方便使用者随时随地管理自己的项目,刚刚琢磨出来如何使用GitHub上传本地工程(PS:本来 ...

  4. 如何用CMake编译从github上下载的源码

    从github上下载了源文件的包,我们应该怎么编译呢? –用Cmake 这里用的IDE是VS2019,windows是64位. 1.在github上下载源文件压缩包 2.解压后,根据README的提示 ...

  5. Nacos 快速开始、版本选择、预备环境准备、下载源码或者安装包、从 Github 上下载源码方式、下载编译后压缩包方式、配置nacos、配置集群、启动服务器、服务注册发现和配置管理、关闭服务器

    1.Nacos 快速开始 1.1.版本选择 1.2.预备环境准备 1.3.下载源码或者安装包 1.3.1.从 Github 上下载源码方式 1.3.2.下载编译后压缩包方式 1.3.3.配置nacos ...

  6. Github上LeakCanary编译报错CreateProcess error=2的解决方法

    现象说明: 从github上拉下LeakCanary编译时报错 1 CreateProcess error=2, ϵͳÕҲ»µ½ָ¶ 原因分析: 该现象是由于Windows中Gradle调用命令未加c ...

  7. 【教程搬运】读懂github上的工程代码——带你熟悉Python中的Parser

    读懂github上的工程代码--带你熟悉Python中的Parser 1.导入包 2.实例化ArgumentParser 3.使用add_argument函数添加参数 4.使用parse_args解析 ...

  8. maven快速入门番外篇——Eclipse下载GitHub上FastDFS-Client客户端源码并转化成maven工程以及打包到本地maven仓库

    由于fastdfs-client的jar包目前在中央仓库是没有坐标的,而在项目中要想实现文件的上传和下载就得使用到它,这不禁就让我们头疼,所以为了解决这个问题,我写下了这篇文章,希望对读者能有所帮助. ...

  9. win8环境编译微软在github上公开的caffe

    1.首先去github上下载微软的caffe  https://github.com/Microsoft/caffe  解压文件到任意位置  2.下载CUDA7.5,并安装  https://deve ...

最新文章

  1. ubuntu 命令行命令历史记录存储在哪个文件夹
  2. c语言学生成绩删除功能,c语言学生成绩管理系统程序设计,有添加,查找,删除,输出,修改,排序等功能!!!...
  3. SAP CRM Product workflow debug
  4. const in c and cpp
  5. [leetcode] N-Queens II
  6. linux网络协议栈 转发组播,Linux 网络协议栈开发基础篇(十)—— 组播(Multicast)基础...
  7. 树、森林、以及二叉树之间的转化
  8. 【Flutter】Dart数据类型之num
  9. Lack of free swap space on zabbix,增加swap空间
  10. 《Android程序设计》一3.8 Android应用打包:.apk文件
  11. html4多文件上传,jQuery h5拖拽多文件上传
  12. 操作系统-第一章 导论02-多道程序设计和分时-电大同步进度
  13. Liang-Barsky算法思想及简单cpp实现
  14. WiFi大师4.0.5源码最新独立版本
  15. Android 基于google Zxing实现二维码 条形码扫描,仿微信二维码扫描效果
  16. 南阳理工ACM 题目73 比大小
  17. ByteBuffer Converting CharBuffer
  18. 没想到,还有小白不知道怎么比较数组是否相等以及检出不匹配项
  19. LinkedBlockingQueue 源码分析
  20. Android 面试题收集

热门文章

  1. (幼儿园毕业)Javascript小学级随机生成四则运算
  2. Maven详解(第二节)
  3. 树莓派基础实验12:PCF8591模数转换器实验
  4. java我的世界非正常退出_我的世界非正常退出怎么办???
  5. 多元函数的高阶微分公式 与 Taylor公式
  6. 精确控制Origin to Word图片格式、大小及主题使用技巧
  7. 【转载】Cygwin安装
  8. 针对python代码下载youtub视屏报错修复
  9. 移动端iOS中input输入框搜索框软键盘出现换行而不是搜索
  10. 健身房人物生活锻炼照片调色艺术LR预设