VS2005编译libevent

本文详细记录了使用Visual Studio 2005编译libevent库的过程及遇到的问题解决办法,包括配置文件调整、依赖库链接、代码修改等内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

   VS2005编译libevent收藏

新一篇: 用SourceNavigator看代码 | 旧一篇: Boost.Signals 教程

<script>function StorePage(){d=document;t=d.selection?(d.selection.type!='None'?d.selection.createRange().text:''):(d.getSelection?d.getSelection():'');void(keyit=window.open('http://www.365key.com/storeit.aspx?t='+escape(d.title)+'&u='+escape(d.location.href)+'&c='+escape(t),'keyit','scrollbars=no,width=475,height=575,left=75,top=20,status=no,resizable=yes'));keyit.focus();}</script>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()就会报这个错误。

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值