vs2010下编译使用hiredisV1.2.0版本

本文介绍了如何下载并使用Hiredis1.2.0在VS2015环境下编译,以解决在VS2010中链接时的错误,包括禁用安全检查、添加ucrtd.lib、处理stdio_common_vsprintf等步骤,确保静态库hiredis.lib的兼容性。
摘要由CSDN通过智能技术生成

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中使用了。

  • 24
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值