这几天在看 libevent 的官方书籍跟着学习,开着个 Ubuntu 的虚拟机在 Windows 下来回切换,学习效率实在低下,且不说编译、测试这些复杂的步骤。所以决定研究一下如何在 Windows Visual Studio 环境下使用 libevent 库,这样学习效率会高很多。从网上借鉴了一些教程,都写的比较粗糙,我也是搞了好一会才搞定,所以自己记录一下。
下载 libevent
官网地址:http://libevent.org/ 直接下载最新版本即可:
编译 libevent 库
首先将下载好的 libevent-2.0.22-stable.tar.gz 解压出来,然后打开开始菜单,找到 Visual Studio Tools
打开。
打开后点击里面的 VS2013 开发人员命令提示
工具。
随后 cd 到你刚刚解压的 libevent-2.0.22-stable 目录下。
最后执行命令 nmake /f Makefile.nmake
编译 libevent。
与 Visual Studio 结合
上面 libevent 编译完成后,会在解压的 libevent-2.0.22-stable 目录下生成三个 .lib
的文件,分别是 libevent.lib
libevent_core.lib
libevent_extras.lib
。把他们拷贝出来待用。
使用 Visual Studio 建立一个 Win32 控制台空项目,建立完成后首先在项目目录下新建两个文件夹,lib 和 inc,用来存放 .lib 库文件和 .h 头文件(熟悉的人目录结构你可以自己规划,我这样写只为新手入门准备,可以参考学习,后面熟悉了随便自己怎么改)。
随后,拷贝解压出来的 libevent-2.0.22-stableinclude
所有文件,到 inc 目录,再拷贝 libevent-2.0.22-stableWIN32-Code
目录下所有文件同样到 inc 目录,此时会出现重名目录的情况,直接覆盖就可以了,实际里面的文件不会重复。
然后拷贝编译好的三个 .lib 文件到 lib 目录下。
需要的文件我们都放到项目目录下了,接下来就是在项目中引入这两个目录。在项目上 右键-属性
。
点击 VC 目录
,分别在包含目录中引入项目目录下的 inc 文件夹、在库目录中引入 lib 文件夹。
在 C/C -代码生成
中,将 运行库
在 Debug 模式下修改为 多线程调试 (/MTd)
,在 Release 模式下修改为 多线程调试 (/MT)
。
在 链接器-输入
,附加依赖库
中分别添加三个 lib 文件和 socket 所需的库文件。
以上环境我们就搭建好了,接下来就是下一段代码来测试一下了。在项目中新建一个 mian.c 文件,输入一下代码编译并运行。
代码语言:javascript复制#include <stdio.h>
#include <WinSock2.h> // windows socket
#include <event2/event.h> // libevent core
int main(int argc, char* argv[])
{
WSADATA wsa_data;
WSAStartup(MAKEWORD(2, 2), &wsa_data);
// init libevent
struct event_base* base = event_base_new();
if (!base)
{
puts("Couldn't get an event_base!");
}
else
{
// 获取当前使用了哪种 I/O 模型,Windows 下仅显示 win32
printf("Using Libevent with backend method <%s>.n",
event_base_get_method(base));
}
WSACleanup();
event_base_free(base);
return 0;
}
如果你得到如下返回,那么证明你环境已经可以正常使用拉。接下来去摸索 libevent 的精髓吧。
代码语言:javascript复制Using Libevent with backend method <win32>.