前言
Paho-Mqtt
使用多种编程语言实现了MQTT的客户端,本文介绍如何编译生成他的C库和C++库。
编译
编译前的准备
paho.mqtt.c
: github-paho.mqtt.c, 点击Code
->Download Zip
paho.mqtt.cpp
: github-paho.mqtt.cpp, 点击Code
->Download Zip
openssl(可选)
: openssl, 下载Win32 OpenSSL vx.x.xj.exe
github下载速度比较慢,但是paho这两个项目都只有几百K,所以还是很快的,请耐心等待下载。
注意:
如果你只想使用C接口的mqtt-paho库,那么你可以只下C版本的代码进行编译。但是想用C++版本的话,是需要两个都下的,因为C++版本依赖C的库
C版本的编译
对于编译这些我已经写了一个.bat
文件,只需要简单几步即可完成编译安装。
解压文件
:得到如下结构的文件,如果目录名是paho.mqtt.c-master
,则需要将目录名改为paho.mqtt.c
,方便后续操作。
- 点击
开始
菜单,找到Visual Studio 20xx
文件夹,点击Developer Command Prompt for Vs 20xx
- 然后
cd D:\Documents\Code\Test\
,注意这里是我的路径,看上图,你需要用你的路径 - 将脚本
paho-c-build-x86.bat
或者paho-c-build-x64.bat
拖到窗口中并填上参数:
注意:
如果使用x86脚本和使用x64脚本的安装路径应该不同,比如我图里使用x86脚本的安装路径是D:\Documents\Code\Library\mqtt
,如果使用x64脚本的话,应该用新的路径,比如D:\Documents\Code\Library\mqtt64
,以免覆盖了x86生成的32位库。
这里有四个参数,填好即可:Usage: build.bat install_prefix_path build_type build_samples build_with_ssl [src_path] install_prefix_path: 编译完成后的安装目录 build_type: 编译类型(Debug 或 Release) build_samples: 是否编译示例程序(TRUE 或 FALSE) build_with_ssl: 是否编译ssl的版本(TRUE 或 FALSE),需要openssl库
脚本
- x86版本:
paho-c-build-x86.bat
@echo off set local :: 默认是字符串赋值,要数字则写/a SET /a param_cnt=0 for %%a in (%*) do set /a param_cnt+=1 if %param_cnt% leq 3 ( echo "参数过少!" && goto :help ) else ( goto :run ) :help echo Usage: build.bat install_prefix_path build_type build_samples build_with_ssl [src_path] echo install_prefix_path: 编译完成后的安装目录 echo build_type: 编译类型(Debug 或 Release) echo build_samples: 是否编译示例程序(TRUE 或 FALSE) echo build_with_ssl: 是否编译ssl的版本(TRUE 或 FALSE),需要openssl库 goto :end :run :: 编译好的安装路径 :: %~1表示去掉参数的引号,%f1表示获取这个路径的绝对路径,%~f1则是两者的结合 SET INSTALL_PREFIX_PATH=%~f1 :: 设置编译类型, Debug or Release SET BUILD_TYPE=%~2 :: 设置是否编译示例程序, TRUE or FALSE SET BUILD_SAMPLES=%~3 :: 设置是否编译SSL的版本, TRUE or FALSE SET BUILD_WITH_SSL=%~4 if "%BUILD_TYPE%"=="" ( SET BUILD_TYPE=release ) if "%BUILD_SAMPLES%"=="" ( SET BUILD_SAMPLES=FALSE ) if "%BUILD_WITH_SSL%"=="" ( SET BUILD_WITH_SSL=FALSE ) echo %INSTALL_PREFIX_PATH% :: 进入项目目录 cd paho.mqtt.c if not "%errorlevel%"=="0" ( echo &#