libevent版本为libevent-1.4.5-stable。
WIN32-Prj目录下有VC项目文件。
libevent.sln不能用,因为只有regress有vcproj文件,其他子项目都是dsp文件。
而libevent.dsw不包括regress。
删除sln文件,直接打开dsw文件,自动转换除regress之外的4个工程为vcproj。
fatal error C1083: 无法打开包括文件:“sys/time.h”
#ifdef _EVENT_HAVE_SYS_TIME_H
#include <sys/time.h>
应该去除_EVENT_HAVE_SYS_TIME_H,不要包含sys/time.h。
_EVENT_HAVE_SYS_TIME_H 定义于 event-config.h,肯定会包含进来,
所以必须更改 event-config.h 文件。
为VS2005复制一份libevent,然后更改它。
config.h是由configure生成的。
make时根据 config.h 生成event-config.h,但有个缺省的event-config.h。
MSVC编译时不能生成config.h文件,而应该使WIN32-Code/config.h生效。
用MSVC编译WIN32-Code/win32.c时会包含该WIN32-Code/config.h。
event-config.h要手工改,memcached项目有针对libevent1.4.4的更改,可拿来用。
(libevent-1.4.4-stable-win32.zip,http://code.jellycan.com/memcached/,但下载一点就会断)
参考jellycan的libevent.diff,即对libevent1.4.4的更改。
参考spserver项目中的libevent-main-iocp-1也行。
用libevent-main-iocp-1\WIN32-Code\event-config.h代替event-config.h。
去除mics.c。libevent可编译成功。
但是几个test项目无法成功编译,应该是因为没有config.h的配置。
对于event_test项目:
__func__未定义。直接在项目宏定义中添加__func__=__FUNCTION__。
实际上该定义在WIN32-Code\config.h中有。
libevent.lib(event.obj) : error LNK2019: 无法解析的外部符号 _evutil_gettimeofday,该符号在函数 _gettime 中被引用
但是libevent.lib只有event.c,还缺许多函数。
在libevent项目中再添加buffer.c evbuffer.c evutil.c singal.c strlcpy.c,并重新生成。
(可参考configure生成的Makefile决定需要哪些文件。)
无法解析的外部符号 __imp__select@20,该符号在函数 _win32_dispatch 中被引用
添加ws2_32.lib
WinSocket未初始化,evutil_socketpair调用socket()失败。
在main()中event_init()之前添加WSAStartup()。
参见regress的main()。
现在event_test可以编译运行,但会立即退出。
原因是win32_dispatch()中的select()调用出错,WSAENOTSOCK (10038),
对非socket应用select()就会报这个错误。
(转载请注明来源于金庆的专栏)