在win64下编译支持双证书的mosquitto
简介:基于TIASSL1.1.1k,编译mosquitto,使得mosquitto支持双证书连接,满足国密标准。
编译环境
- 在win64下的TIASSL1.1.1k 库
-
修改源码后的mosquitto2.0.10
-
CMake 3.25.0
-
cJSON 1.7.15
-
Pthreads-Win32
-
VisualStudio 2022
编译步骤
步骤一:配置安装cJSON
-
解压源码
-
使用cmake配置编译环境,设置输出目录
- 使用vs2022打开生成的配置
-
使用vs2022生成解决方案
-
在debug目录下,找到生成的库文件
- 复制源代码中的
cJSON.h
和库文件到include
和lib
文件夹
步骤二:添加pthread支持
pthread本身的Linux平台的开发库,但是POSIX threads for win32开源项目给出了其windows平台下的开源实现。官网地址Pthreads-Win32,在官网上给出的DLL、LIB、头文件下载地址为:ftp//sourceware.org/pub/pthreads-win32/dll-latest,由于现在的浏览器不支持访问ftp数据库,直接使用xftp7进行下载。
- 在xftp7 地址输入
ftp://sourceware.org
,回车选择匿名登录
- 进入到/pub/pthreads-win32/文件夹,双击dll-latest,进入到最新的库文件和头文件夹
-
将dll、include、lib下载到主机上
-
查看dll文件夹下的x64位动态库
- 查看include头文件库
- 查看lib文件夹下x64位库文件
步骤三:使用Cmake配置mosquitto
这里使用CMAKE 3.25.0
生成VS2022
下的项目文件
- 解压
mosquitto-2.0.10
- 使用
cmake
打开,修改源文件路径和build
路径
-
Openssl报错
-
首先,修改变量
LIB_EAY_RELEASE
,修改为libcrpto
动态库的位置,这里使用的是libcrypto.dll.a
,修改变量SSL_EAY_RELEASE
的值为:libssl.dll.a
动态库的地址。然后重新配置。CMAKE_INSTALL_PREFIX
路径,可以修改为安装位置。
- 报错,添加两个环境变量。一个是:
OPENSSL_INCLUDE_DIR
,值为Opensll的include路径。添加环境变量OPENSSL_ROOT_DIR
,值为TASSL
的目录然后重新Configure。
- 报错,找不到cJson路径
- 添加cJson的头文件路径和库文件
- 重新Configure,得到下图,没有报错,直接生成即可。
- 生成成功,打开VS2022项目即可。
步骤四:在VS2022下编译mosquitto库
打开项目后,解决方案栏目的libmosquitto
就是要生成的库文件的项目。
- 选中
libmosquitto
右键生成,会报错,找不到pthread.h
- 右键
libmosquitto
,打开属性面板,将pthread的头文件添加到包含目录,应用后重新生成。
- 大量重定义,且
error C2011: “timespec”:“struct”类型重定义类型重定义
的错误
- 右键
libmosquitto
,打开属性面板,找到附加依赖项,发现这里的pthreadVC2.lib
的路径并不是我们之前下载的pthread-win32
,先将这一个删掉。
- 在附加库目录添加pthread的库目录
- 第4中的附加依赖项,中添加
pthreadVC2.lib
7.在预处理器添加HAVE_STRUCT_TIMESPEC
可以解决3的问题。
- 在mosquitto源码目录的include目录下,创建cjson文件夹,将cjson的头文件,复制到cjson下面。
- 编译成功
- 查看生成的
mosquitto.lib
和mosquitto.dll
,在vs项目的lib\Debug文件夹下
- 将mosquitto头文件找到,将两个库文件复制出来,得到下面的
- 至此,编译完成。