2011年(121)
分类: C/C++
2011-04-07 13:44:46
二、在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的问题,否则程序会崩溃。