金庆的专栏

  C++博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  70 随笔 :: 0 文章 :: 221 评论 :: 0 Trackbacks
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()就会报这个错误。

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

posted on 2008-07-07 09:22 金庆 阅读(1368) 评论(7)  编辑 收藏 引用 所属分类: 1. C/C++

评论

# re: VS2005编译libevent 2008-07-07 12:53 Kevin Lynx
libevent在windows下似乎没多大实用价值(因为用的是select)。spserver的作者写了个IOCP版本。  回复  更多评论
  

# re: VS2005编译libevent 2008-07-07 14:34 true
最近也研究过libevent,自身带的sln,确实编译不过,该也起来麻烦,至今也没编译通过,过段时间再研究吧,希望libevent的作者,提出官方的解决方案  回复  更多评论
  

# re: VS2005编译libevent[未登录] 2008-07-08 10:26 我要去桂林
我都编译一周了
还没过去

郁闷呢  回复  更多评论
  

# re: VS2005编译libevent[未登录] 2008-07-08 13:22 我要去桂林
我的错误信息:

4>c:\documents and settings\user\桌面\libevent-1.4.5-stable\libevent-1.4.5-stable\event.h(225) : error C2079: “ev_timeout”使用未定义的 struct“timeval”
4>c:\documents and settings\user\桌面\libevent-1.4.5-stable\libevent-1.4.5-stable\sample\time-test.c(35) : error C2079: “tv”使用未定义的 struct“timeval”
4>c:\documents and settings\user\桌面\libevent-1.4.5-stable\libevent-1.4.5-stable\sample\time-test.c(37) : warning C4244: “初始化”: 从“time_t”转换到“int”,可能丢失数据
4>c:\documents and settings\user\桌面\libevent-1.4.5-stable\libevent-1.4.5-stable\sample\time-test.c(39) : error C2065: “__func__”: 未声明的标识符
4>c:\documents and settings\user\桌面\libevent-1.4.5-stable\libevent-1.4.5-stable\sample\time-test.c(43) : error C2223: “->tv_sec”的左侧必须指向结构/联合
4>c:\documents and settings\user\桌面\libevent-1.4.5-stable\libevent-1.4.5-stable\sample\time-test.c(43) : error C2223: “->tv_usec”的左侧必须指向结构/联合
4>c:\documents and settings\user\桌面\libevent-1.4.5-stable\libevent-1.4.5-stable\sample\time-test.c(44) : error C2224: “.tv_sec”的左侧必须具有结构/联合类型
  回复  更多评论
  

# re: VS2005编译libevent 2008-07-09 11:26 金庆
@我要去桂林
我只编译了libevent和event_test两个项目,还有两个test项目要改的较多,没必要一定通过。
你的这个错误说明libevent已经通过,恭喜。time_test确实是通不过的。  回复  更多评论
  

# re: VS2005编译libevent 2008-07-09 14:55 spirit
好东西,之前也想研究下libevent,结果在windows没编译通过,就放到ubuntu下研究了,我再在win下试试。  回复  更多评论
  

# re: VS2005编译libevent[未登录] 2008-07-10 13:25 我要去桂林
多谢 : 金庆

编译通过了。



我主要想用: spserver 的http server集成到客户端。  回复  更多评论
  


标题  
姓名  
主页
验证码 *
内容(提交失败后,可以通过“恢复上次提交”恢复刚刚提交的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
[使用Ctrl+Enter键可以直接提交]
相关链接:
网站导航: