金庆的专栏

  C++博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  423 随笔 :: 0 文章 :: 454 评论 :: 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 金庆 阅读(10390) 评论(21)  编辑 收藏 引用 所属分类: 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集成到客户端。  回复  更多评论
  

# re: VS2005编译libevent 2008-12-26 01:19 gashero
我用MinGW的,编译是过去了,可是event_dispatch()那里出错,根本无法进入事件循环。  回复  更多评论
  

# re: VS2005编译libevent 2008-12-26 08:54 金庆
@gashero
是不是也是windows下的select()问题?
查找出错原因应该不难吧?
  回复  更多评论
  

# re: VS2005编译libevent 2009-02-12 09:01 路过
@金庆
没有那么麻烦吧,直接把win32-code下的config.h复制上来,改成event-config.h,编译就OK了。  回复  更多评论
  

# re: VS2005编译libevent 2009-02-12 09:36 金庆
@路过
可能是这样吧。大家可以这样试试。  回复  更多评论
  

# re: VS2005编译libevent[未登录] 2009-07-29 23:10 thinke365
select.c , epoll.c , kqueue.c也可以用vs 2005编译码?  回复  更多评论
  

# re: VS2005编译libevent 2009-07-30 09:02 金庆
@thinke365
select.c应该可以,epoll.c, kqueue.c在Windows上用不到,应该是不可编译的,看看工程文件中是否包含了这两个文件?  回复  更多评论
  

# re: VS2005编译libevent 2010-11-12 10:52 你好,
你好,我是一个大菜鸟,请问金庆先生:
1、在windows环境下用libevent库,应该是把libevent库编译成静态库吧;
2、我打开libevent-1.4.9-stable里面有两个文件夹:一个是WIN32-Code和WIN32-Prj,我到底要进哪个文件夹进行编译呢?
3、我的目标只有一个,如果编译出静态库,我在我的程序中如何设置。
  回复  更多评论
  

# re: VS2005编译libevent 2010-11-12 11:22 金庆
@你好,
1. 动态库也行, 一般还是静态简单点
2. 进WIN32-Prj编译
3. 需要设置Include目录和Lib目录  回复  更多评论
  

# re: VS2005编译libevent 2010-11-15 13:02 刚工作的新手
@金庆
首先非常感谢金老师在百忙这中抽时间回答了我在2010-11-12 10时52分的提出的三个问题:
因为我水平太菜,没能编译成功官网的libevent,我这两天用了一个iocp版本的libevent,在vc 6.0下编译并通过了,在VC中也做了两个DEMO都没问题。

1、我想结合libevent和QT来编写程序,我怎样在我的QT程序中引用libevent,如何设置,是不是首先要用mingw来编译libevent,怎么编译,金老师在这方面有试过没?
  回复  更多评论
  

# re: VS2005编译libevent 2010-11-15 13:44 金庆
@刚工作的新手
引用libevent需要在编译选项添加-L -l选项, 请查看gcc中相关的帮助. 需要用mingw编译的, vc编译的只能用于vc. mingw下直接make install应该就可以了, 我忘了以前自己是怎么做的.  回复  更多评论
  

# re: VS2005编译libevent 2010-11-15 16:42 刚工作的新手
@金庆
谢谢金老师的回答,我捣腾捣腾。  回复  更多评论
  

# re: VS2005编译libevent[未登录] 2011-01-05 23:40 hustnn
请问struct event_list 在哪里定义的?  回复  更多评论
  

# re: VS2005编译libevent 2011-01-06 11:29 金庆
@hustnn
自己搜索一下吧:)  回复  更多评论
  

# re: VS2005编译libevent 2013-11-13 11:37 junx1989
@我要去桂林
包含 windows.h 把开头处变成:
#include <sys/stat.h>
#ifndef WIN32
#include <sys/queue.h>
#include <unistd.h>
#else
#include <windows.h>
#endif
#include <time.h>  回复  更多评论
  


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理