最近我在VS2012上进行Redis开发遇到一些困扰. 编译Redis的lib库没问题。但是使用这些lib库就不太顺利了. 在网上查来查去也没解决。不过其实Redis的客户端项目RedisCli.vcxproj,就是一个最好的使用例子. 我把几个需要注意的地方贴出来
注意事项1. 链接器->输入->忽略所有默认库: 应该设置为"否"
这里不能选择"是 (/NODEFAULTLIB)" 否则会产生如下错误(这只是其中的一部分)
1>win32fixes.obj : error LNK2019: 无法解析的外部符号 ___report_rangecheckfailure,该符号在函数 _wsa_strerror 中被引用
1>hiredis.lib(hiredis.obj) : error LNK2001: 无法解析的外部符号 ___report_rangecheckfailure
1>win32fixes.obj : error LNK2019: 无法解析的外部符号 __beginthreadex,该符号在函数 _pthread_create 中被引用
1>win32fixes.obj : error LNK2019: 无法解析的外部符号 __endthreadex,该符号在函数 _win32_proxy_threadproc@4 中被引用
1>win32fixes.obj : error LNK2019: 无法解析的外部符号 __cwait,该符号在函数 _wait3 中被引用
1>win32fixes.obj : error LNK2019: 无法解析的外部符号 __errno,该符号在函数 _replace_ftruncate 中被引用
注意事项2: 你的工程文件需要引入win32fixes.c.
如果没有引入win32fixes.c.则会产生如下错误.
1>hiredis.lib(hiredis.obj) : error LNK2019: 无法解析的外部符号 _strerror_r,该符号在函数 ___redisSetError 中被引用
1>hiredis.lib(net.obj) : error LNK2001: 无法解析的外部符号 _strerror_r
1>hiredis.lib(net.obj) : error LNK2019: 无法解析的外部符号 _replace_setsockopt,该符号在函数 _redisContextSetTimeout 中被引用
1>D:\work\MOM\RedisTest\Debug\Test.exe : fatal error LNK1120: 2 个无法解析的外部命令
注意事项3:如果你的项目使用了预编译头,那么win32fixes.c也需要添加预编译头include "stdafx.h".
有可能还会遇到变量和函数重定义的问题. 比如sleep函数.BOOLEAN类型等。最好单独的把Redis封装成一个类库使用.独立在exe项目之外.