Chinaunix首页 | 论坛 | 博客
  • 博客访问: 609137
  • 博文数量: 142
  • 博客积分: 116
  • 博客等级: 入伍新兵
  • 技术积分: 1445
  • 用 户 组: 普通用户
  • 注册时间: 2010-09-28 08:37
文章分类

全部博文(142)

文章存档

2017年(7)

2016年(57)

2015年(48)

2014年(30)

我的朋友

分类: NOSQL

2015-12-08 06:00:24

1 安装cygwin,需要gcc,g++,make
2 从redis.io下载源代码
3 根据redis入门和网上文章说的,cygwin下编译需要修改几个代码
  1. src/redis.h:

  2. #ifndef SA_ONSTACK
  3. #define SA_ONSTACK 0
  4. #endif

  5. src/object.c

  6. #define strtold(a,b) ((long double)strtod((a),(b)))
下面是网上说的
  1. src/redis.h:

  2. /* Cygwin Fix */
  3. #ifdef __CYGWIN__
  4. #ifndef SA_ONSTACK
  5. #define SA_ONSTACK 0x08000000
  6. #endif
  7. #endif

 /deps/hiredis/net.c:
在 #include "sds.h"后增加以下代码
/* Cygwin Fix */   
#ifdef __CYGWIN__
#define TCP_KEEPCNT 8
#define TCP_KEEPINTVL 150
#define TCP_KEEPIDLE 14400
#endif

4 编译make
遇到错误
  1. /usr/include/netinet/tcp.h:54:2: error: unknown type name ‘u_short’
修改
  1. fmacros.h:
  2. 把判断__linux__的地方,增加判断__CYGWIN__。例如:

  3. #if defined(__linux__)
  4. #define _GNU_SOURCE
    #define _DEFAULT_SOURCE
    #endif

    改成

  5. #if defined(__linux__) || defined(__CYGWIN__)
    #define _GNU_SOURCE
    #define _DEFAULT_SOURCE
    #endif

另外,还需要修改
  1. /deps/hiredis/fmacros.h
  2. 增加
  3. #if defined(__linux__) || defined(__CYGWIN__)
    #define _GNU_SOURCE
    #define _DEFAULT_SOURCE
    #endif
unknown type name ‘u_short’这个问题被卡了很久,后来在sys/types.h里,加了很多
#ifndef __u_short_defined
int test200;
#endif
这样的调试行,然后用gcc -E xx.c查看输出里是否包含int test200,
最后跟踪到是  # if    __BSD_VISIBLE  没进去。试着按上面修改了/deps/hiredis/fmacros.h才成功。


遇到错误
  1. LINK redis-server
  2. gcc: error: unrecognized command line option ‘-rdynamic’
  3. Makefile:171: recipe for target 'redis-server' failed
  4. make: *** [redis-server] Error 1
可能是cygwin的gcc不支持这个选项,Makefile里搜索到rdynamic,然后去掉就行了。


经过一番折腾,make, make install 虽然报了一堆警告,但总算安装成功了,server能启动。

根据redis入门书中所说,redis使用了很多linux的特性,所以官方是不支持windows的,只能用来学习。


阅读(2232) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~