现在的位置: 首页 > 综合 > 正文

VS2005编译libevent

2013年12月04日 ⁄ 综合 ⁄ 共 1492字 ⁄ 字号 评论关闭
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()就会报这个错误。

(转载请注明来源于金庆的专栏)

抱歉!评论已关闭.