Chinaunix首页 | 论坛 | 博客
  • 博客访问: 338306
  • 博文数量: 121
  • 博客积分: 2771
  • 博客等级: 少校
  • 技术积分: 705
  • 用 户 组: 普通用户
  • 注册时间: 2010-12-01 12:44
文章分类

全部博文(121)

文章存档

2011年(121)

分类: C/C++

2011-04-07 13:44:46

一、资源
网络上介绍的memcached在windows下编译基本上是用:
VC,MinGW,Cygwin
这三种方式。下面是一些链接:
a)
版本:1.1.12, 1.1.13-pre, 1.2.1:
网址:
源代码:MS Visual Studio工程(包括libevent1.1a)
预编译:Win32二进制,libevent1.1a预编译库
b)
版本:1.2.4
网址:
源代码:Visual Studio 2005工程
预编译:Win32二进制,Libevent 1.3e Win32 Binary
c)
版本:1.2.5, 1.2.6
网址:
源代码:Visual Studio工程(包括libevent 1.4.4),libevent 1.4.12的cmake文件
预编译:Win32二进制
d)
版本:1.4.2
网址:
源代码:MinGW/gcc
预编译:Win64二进制
e)
版本:不明
网址:http://trondn.blogspot.com/2010/03/building-memcached-windows.html
源代码:MinGW(需要用msysgit下载代码)
预编译:无(文章说可以编译32位和64位)
f)
版本:1.4.5
网址:http://blog.nyarla.net/2010/08/14/1
源代码:Cygwin
预编译:无

 

 

 

 

二、在cygwin中编译(引用自http://blog.nyarla.net/2010/08/14/1的方法)
上述这些windows移植版本中,均需要修改代码以适应windows,
而用cygwin编译需要修改的地方较少,所以这里详细记录一下:
采用http://blog.nyarla.net/2010/08/14/1的方法,
大概步骤如下:
--------------------------
1. 安装cygwin
下载在线安装程序。
双击setup.exe,选择Install from Internet,
(如果之前已经装过而且没删缓存文件,
可以选择Install from Local Directory)
Select Packages在Search中分别搜索以下项目:
gcc(包括gcc-core,gcc-g++)
make
wget
选中(一般Bin列出现x就可以了,不需要装Src)后按下一步安装。
在cygwin命令行下输入以下命令确定是否装好:
make --version
gcc --version
wget --version
tar --version
--------------------------
2. 编译libevent
cd
wget
cd
wget
tar zxvf libevent-1.4.14b-stable.tar.gz
cd libevent-1.4.14b-stable
./configure --prefix=/usr/local/libevent
make clean all
make install
--------------------------
3. 给memcached1.4.5打补丁
cd
tar zxvf memcached-1.4.5.tar.gz
cd memcached-1.4.5
./configure --prefix=/usr/local/memcached --with-libevent=/usr/local/libevent
make
出现错误:
util.c: In function `safe_strtoull':
util.c:19: warning: array subscript has type `char'
util.c: In function `safe_strtoll':
util.c:42: warning: array subscript has type `char'
util.c: In function `safe_strtoul':
util.c:62: warning: array subscript has type `char'
util.c: In function `safe_strtol':
util.c:86: warning: array subscript has type `char'
用IE打开

点击右上角raw下载修改好的util.c

然后覆盖到memcached-1.4.5目录下
explorer .
继续执行make
出现另一个错误
testapp.c: In function `cache_redzone_test':
testapp.c:125: error: unknown field `sa_handler' specified in initializer
testapp.c:125: warning: missing braces around initializer
testapp.c:125: warning: (near initialization for `action.')
打开testapp.c把125行代码
struct sigaction action = { .sa_handler = SIG_IGN, .sa_flags = 0};
改为
struct sigaction action;
action.sa_handler = SIG_IGN;
action.sa_flags = 0;
然后继续执行
make
确保11211端口没有被占用,然后执行:
make test
出现错误
prove ./t
make: prove: Command not found
可以把Makefile
prove $(srcdir)/t
改为
-prove $(srcdir)/t
以忽略此错误

 

 

(补注:prove程序可以在perl的安装包找到,

由于版本问题可能无法运行此命令,

要在windows运行prove可以下载最新版的ActivePerl的社区版,

更新到cygwin或msys的目录下)

 


然后执行:
make install
执行
./memcached.exe
启动memcached监听端口
--------------------------
引用自:
http://blog.nyarla.net/2010/08/14/1

 

 

 

 

-----------------------------

20100826update

补充废话:

memcached服务器版本不同会影响一些功能,

例如:超时时间的单位;是否支持cas;是否支持64位;是否支持多线程;等等

所以最好参考官网的资料和考虑实际情况。

另外,memcached的服务器端与客户端是完全两回事(比方说memcached的c客户端库的编译要使用pthread库,而服务器端的1.2版貌似可以不使用pthread库;实现使用的算法不同;各种编程语言的memcached客户端所实现的功能也千差万别)

 

 ---------------------------

 

20100828 补注关于prove的运行

 

-------------------------

 

20100830 update

 

三、使用MinGW编译

 

可以参考

的方法编译。

值得注意的是,如果想静态链接pthread库,

需要注意Pthreads Win32代码中DllMain的问题,否则程序会崩溃。

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