准备工作
mosquitto
mosquitto源码下载地址,目前使用的是最新版本2.0.14。
window
windows系统为win7 sp1版本,其他版本应该也也可以。
Visual Studio
VS版本为2010,其他版本类似。
cmake
用于为mosquitto配成、生成vs下的工程,cmake的下载地址,这里使用的是3.22.1版本。
cmake的安装比较简单,安装提示安装即可。
pthreads-ws32
mosquitto用到了POSIX下的pthreads线程库,windows原生是不支持POSIX pthreads的,这里需要安装windows下的pthreads开发库,这里是下载地址,选在最新版本的即可。
openssl
mosquitto用到了openssl中的加解密和TLS相关的功能,这里需要安装windows版本的openssl开发库,这里是windows openssl开发库的下载地址,注意选择,开发版本下载、安装。
cJSON
mosquitto中也用到了cJSON,cJSON下载地址。
编译步骤
安装pthread ws32
解压pthreads-w32-2-9-1-release.zip,会出现三个文件夹,这里需要注意的是Pre-build.2这个文件夹,这里面包括pthread相关的动态库、静态库、头文件等开发相关的内容。
- 将Pre-build.2下的incldue拷贝到visual studio 2010的安装目录下VC/include下,我这里是: C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include。
- 将Pre-build.2下的lib下x86或x64目录下的静态库拷贝到VC/lib下,具体拷贝x86还是x64,需要根据是编译32位应用和64位应用,这里编译的mosquitto是32位的,所以这里拷贝的是x86下的静态库,拷贝目录是:C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\lib
安装openssl
这里直接安装下载的openssl安装文件Win64OpenSSL-3_0_1.exe,默认安装位置是:C:\Program Files\OpenSSL-Win32,安装完成之后,可以看到openssl的头文件和库文件。
安装cJSON
cJSON的编译相对来说,较为简单,步骤如下
-
配置cmake环境。
由于cJSON比较简单,所以,Configure、Generate步骤没有问题。 -
打开,VS2010,进行编译。
-
新建目cJSON,并创建lib和include两个目录,将编译成功后的库文件和.h文件分别放到lib和include目录。
编译mosquitto
准备
准备mosquitto的cmake编译环境。
-
将mosquitto-2.0.14解压,注意,解压缩的位置不要包含中文字符,否则,cmake会找不到mosquitto源码路径。
-
配置mosquitto vs工程配置文件路径,注意,路径也不要包含中文字符。
配置
-
点击“Configure”,选择“Visual Studio 10 2010”.
-
配置中断,提示“找不到OPENSSL库”,提示需要配置“”OPENSSL_ROOT_DIR环境变量。
在上一步,我们已经安装了openssl,这里只需要配置一下环境变量即可。
注意,OPENSSL_ROOT_DIR环境变量的value是openssl安装路径,即:C:\Program Files\OpenSSL-Win64。保存配置,点击“Configure”继续配置。 -
配置中断提示未找到cJSON库,新建环境变量:CJSON_INCLUDE_DIR和CJSON_LIB_DIR,指定上一节的cJSON的安装目录,保存配置,点击“Configure”继续配置。
4.不出意外,配置成功。
5.点击,“Generate”生成VS2010工程。
编译
-
打开mosquitto工程,开始编译。
注意,这里只编译libmosquitto这个工程。 -
编译时提示,找不到stdbool.h文件,这是由于VS2010编译环境,没有这个文件,下面是从VS2015中得到的stdbool.h文件。
//
// stdbool.h
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
// The C Standard Library <stdbool.h> header.
//
#ifndef _STDBOOL
#define _STDBOOL
#define __bool_true_false_are_defined 1
#ifndef __cplusplus
#if __STDC_VERSION__ < 199901
typedef int _Bool;
#endif
#define bool _Bool
#define false 0
#define true 1
#endif /* __cplusplus */
#endif /* _STDBOOL */
/*
* Copyright (c) 1992-2010 by P.J. Plauger. ALL RIGHTS RESERVED.
* Consult your license regarding permissions and restrictions.
V5.30:0009 */
将其放到VC/include目录下即可。注意,如果只编译,libmosquitto这个工程的话,不需要stdbool.h这个文件。
- 继续编译,不出意外,编译成功,会在工程的Release文件夹下生成lib和dll文件。