Windows下使用hiredis各种常见问题(折磨死人了)
不得不说,对一个小白来说,刚摸索的过程很痛苦,所以在此给大家把一些常见问题给列出来,方便后面各位新手学习少走弯路,各位大神请轻喷。
1.还是按照其他人的方式先下载源码,不要告诉我怎么下。
https://github.com/MSOpenTech/redis
选择3.0版本,如果需要源码可以直接down,如果是要.exe文件需要选择release然后下载
2.此时已经获得源码和.exe
- 打开D:\RedisWindows\redis-3.0\msvs目录下面的sln,vs2013或者12都可以
- 选择hiredis和Win32_Interop项目重新生成相关的lib文件
- *新建一个自己的vs项目并且配置相关属性
此处根据自己的目录选择,一般的目录是这样的:D:\RedisWindows\redis-3.0\deps\hiredis
再配置
设置链接库的目录
这个目录注意一定是hiredis.lib和Win32_Interop.lib的目录,然后在配置输入
3.接下来就是添加自己的源码示例一下就行 main.cpp
在自己的源码中一定要添加D:\RedisWindows\redis-3.0\src\Win32_Interop目录下的
win32fixes.c 和win32fixes.h这两个文件到main.cpp同级目录,并且让自己的工程包含进去。
- 现在添加几句源码
#include <hiredis.h>
//#define NO_QFORKIMPL
#include <win32fixes.h>
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
WSADATA wsaData;
WSAStartup(MAKEWORD(2, 1), &wsaData);
redisContext*c = redisConnect("127.0.0.1", 6379);
if (c->err)
{
redisFree(c);
return 0;
}
system("pause");
return 0;
}
此时运行出错:
各种errorC4996
然后在此处配置一下
把最上面3句加上,然后运行就OK
- 4.现在总结所遇到的问题
- 如果你下载的源码来编译的时候目录有空格D:\RedisWindows\redis-3.0\msvs
比如Redis+空格+Windows是这样的目录,那么你在打开RedisServer.sln编译Win32_Interop这个项目时会出现EventLog.dll打开失败或者出错,因此一定要把路径设置常规的方式也不要含有中文 - 如果在编译自己创建的项目时出现
Redis.obj : error LNK2001: 无法解析的外部符号 __imp__WSAStartup@8
1>win32fixes.obj : error LNK2001: 无法解析的外部符号 __imp__WSAStartup@8
1>win32fixes.obj : error LNK2001: 无法解析的外部符号 __imp__setsockopt@20
1>hiredis.lib(hiredis.obj) : error LNK2001: 无法解析的外部符号 __imp__send@16
1>hiredis.lib(hiredis.obj) : error LNK2001: 无法解析的外部符号 __imp__closesocket@4
1>hiredis.lib(hiredis.obj) : error LNK2001: 无法解析的外部符号 __imp__recv@16
1>hiredis.lib(hiredis.obj) : error LNK2001: 无法解析的外部符号 __imp__WSAGetLastError@0
1>hiredis.lib(net.obj) : error LNK2001: 无法解析的外部符号 __imp__getsockopt@20
1>hiredis.lib(net.obj) : error LNK2001: 无法解析的外部符号 __imp__gethostbyname@4
1>hiredis.lib(net.obj) : error LNK2001: 无法解析的外部符号 ___WSAFDIsSet@8
1>hiredis.lib(net.obj) : error LNK2001: 无法解析的外部符号 __imp__socket@12
1>hiredis.lib(net.obj) : error LNK2001: 无法解析的外部符号 __imp__htons@4
1>hiredis.lib(net.obj) : error LNK2001: 无法解析的外部符号 __imp__select@20
1>hiredis.lib(net.obj) : error LNK2001: 无法解析的外部符号 __imp__inet_addr@4
在动态库输入的地方一定加上ws2_32.lib或者在代码前#pragma comment(lib, “ws2_32.lib”)
- 如果在前面都没问题了 并且redisserver也启动了还连接不上
WSADATA wsaData;
WSAStartup(MAKEWORD(2, 1), &wsaData);
在调用redisconnect函数前加上这个
5.最后再说说如何启动redisserver吧
进入cmd