VS2005编译libevent

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()就会报这个错误。

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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值