DSP

VS2005编译libevent

2019-07-13 18:15发布

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 应该去除_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()就会报这个错误。 (转载请注明来源于金庆的专栏)