Windows下编译libevent

1.windows下编译libevent,将会用到 "libevent-2.0.10-stable/" 目录下的Makefile.nmake.这个makefile会包含 "WIN32-Code\event2"下的event-config.h文件,里面用到了编译WIN32静态库需要设定的宏。


2.还是有3个文件要手动加入宏

event_iocp.c,evthread_win32.c,listener.c中文件头一行加入如下宏定义:#define _WIN32_WINNT 0x500,为什么要加入这个宏呢,

因为event_iocp里用到<winbase.h>头文件(<windows.h>会包含它)里的函数定义,如InitializeCriticalSectionAndSpinCount,而<winbase.h>这个头文件里这个函数是这样定义的:

#if (_WIN32_WINNT >= 0x0403)
WINBASEAPI
BOOL
WINAPI
InitializeCriticalSectionAndSpinCount(
    __out LPCRITICAL_SECTION lpCriticalSection,
    __in  DWORD dwSpinCount
    );


WINBASEAPI
DWORD
WINAPI
SetCriticalSectionSpinCount(
    __inout LPCRITICAL_SECTION lpCriticalSection,
    __in    DWORD dwSpinCount
    );
#endif


这下知道了吧,所以要定义_WIN32_WINNT这个宏,而且值要大于0x0403。如果没有这个宏或不满足条件,编译器会假定这个函数没有定义,等到链接时再寻找它,

这样这个函数的符号就假定返回一个int,而显示标准库文件里这个函数不是返回int,所以在链接时就会找不到这个函数符号啦!


另外,还要注意宏一定要定义在#include <windows.h>之前,不然还是没有作用哦。


3.然后打开VS2005的命令行提示:

切换到"libevent-2.0.10-stable/" 目录下,执行nmake /f Makefile.nmake。即可生成我们需要的libevent_core.lib libevent_extras.lib libevent.lib 3个静态库文件。

你可能感兴趣的:(windows,makefile)