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()就會報這個錯誤。
(轉載請注明來源于金慶的專欄)