hiredis中含有C99语法,VS2010并不支持,vs2010只支持redis2.6版本的编译,为了支持redis3.2的使用,需要用vs2015编译出适合vs2010编译的hiredis.lib
简介
每个redis的发行版本中都含有对应的hiredis的源码,为了适应各个版本的redis,采用hiredisV1.2.0,其版本的说明:
它是极简主义的,因为它只增加了对协议的最小支持,但同时它使用了一个高级的类似printf的API。
除了支持发送命令和接收应答之外,它还附带了一个与I/O层分离的应答解析器。它是一个流解析器,设计为易于重用,例如,它可以用于更高级别的语言绑定,以实现高效的应答解析。
Hiredis只支持二进制安全的Redis协议,所以你可以使用它与任何版本的Redis >= 1.2.0。
这个库附带了多个api。有同步API、异步API和应答解析API。
下载hiredis1.2.0
链接: https://gitcode.com/redis/hiredis/tags/v1.2.0
VS2015编译
源码里面没有现成的VS2015工程项目,需要我们用CMake构建
创建一个build目录,进入build目录打开命令行:cmake …
构建成功后会生成一个hiredis.sln,使用vs2015打开。
解决生成的hiredis.lib在vs2010无法使用的问题
生成的工程项目中使用vs2015是可以直接编译成功hiredisd.dll的,但是vs2010并不能直接使用,将其编译成静态库hiredis.lib。
但是vs2010链接时还是会一堆报错:
1>hiredisd.lib(hiredis.obj) : error LNK2019: 无法解析的外部符号 ___report_rangecheckfailure,该符号在函数 _redisvFormatCommand 中被引用
1>hiredisd.lib(read.obj) : error LNK2001: 无法解析的外部符号 ___report_rangecheckfailure
1>hiredisd.lib(sds.obj) : error LNK2001: 无法解析的外部符号 __imp____stdio_common_vsprintf
1>hiredisd.lib(hiredis.obj) : error LNK2019: 无法解析的外部符号 __imp____stdio_common_vsprintf,该符号在函数 __vsnprintf_l 中被引用
1>hiredisd.lib(async.obj) : error LNK2001: 无法解析的外部符号 __imp____stdio_common_vsprintf
1>hiredisd.lib(net.obj) : error LNK2001: 无法解析的外部符号 __imp____stdio_common_vsprintf
1>hiredisd.lib(read.obj) : error LNK2001: 无法解析的外部符号 __imp____stdio_common_vsprintf
1>hiredisd.lib(async.obj) : error LNK2019: 无法解析的外部符号 __imp____stdio_common_vsnprintf_s,该符号在函数 __vsnprintf_s_l 中被引用
1>hiredisd.lib(net.obj) : error LNK2001: 无法解析的外部符号 __imp____stdio_common_vsnprintf_s
1>hiredisd.lib(read.obj) : error LNK2001: 无法解析的外部符号 __imp____stdio_common_vsnprintf_s
1>hiredisd.lib(read.obj) : error LNK2019: 无法解析的外部符号 __imp___dclass,该符号在函数 _processLineItem 中被引用
1>D:\zx_use\project\build\App\tcp_cli\Debug\tcpcli.exe : fatal error LNK1120: 4 个无法解析的外部命令
1、VS2015禁用安全检查
2、VS2010添加ucrtd.lib或者在VS2015添加宏_NO_CRT_STDIO_INLINE
3、手动实现isfinite()函数,将read.c中的使用替换isfinite()函数,实现方法:
#include <float.h>
int ret = d > DBL_MAX || d < DBL_MIN ? 1 : 0;
4、程序运行时调用assert()函数会崩溃,VS2015再添加宏NDEBUG重新编译hiredis.lib
现在生成的hiredis.lib就可以在vs2010中使用了。