Windows10(Win10)下编译libevent

一.  准备工作

去官网下载最新的稳定发布版本libevent-2.1.8-stable.tar.gz

官网地址:http://libevent.org/

. 使用VS2012编译

1.解压libeventC:\Users\admin\Desktop\libevent\libevent-2.1.8-stable

2.打开“VS2010开发人员命令提示工具,如下图所示。

3.输入指令开始编译

       使用vs的命令行工具,cdlibevent-2.1.8-stable目录,执行脚本makefile.nmake,命令如下:
nmake  Makefile.nmake,如下图所示。

有网友说编译之前应该在以下3个文件开头添加“#define _WIN32_WINNT 0x0500”

libevent-2.1.8-stable \event_iocp.c
libevent-2.1.8-stable \evthread_win32.c
libevent-2.1.8-stable \listener.c

但是并没有说明为什么要添加,而且我没添加,编译和使用时也没什么问题。

后来还是查了一下_WIN32_WINNT的意义,可以参考修改WINVER、_WIN32_WINNT和_MSC_VER

4.编译结果

编译成功后,在libevent-2.1.8-stable目录下生成如下三个库文件。

libevent.lib
libevent_core.lib
libevent_extras.lib

至于这三个库文件的功能,可以参考:libevent学习之一:libevent源码的特点和结构

三、使用示例

1.新建项目

创建一个最简单的WIN32 Console(中文叫Win32控制台)工程,默认设置即可

 

2 拷贝文件

2.1 在项目目录中新建一个lib文件夹,将上面三个lib文件copy到该目录下。

2.2 在项目目录中再新建一个include文件夹,

libevent-2.1.8-stable\include下的文件和文件夹copy到该目录下,

libevent-2.1.8-stable\WIN32-Code下的文件和文件夹copy到该目录下,2个event2目录下的文件合并一起。

3 添加代码

在项目名 .cpp文件中添加如下代码

#define WIN32_LEAN_AND_MEAN
#include <Windows.h>
#include <winsock2.h>
#include <event.h>
#include <evhttp.h>

void root_handler(struct evhttp_request *req, void *arg)
{
	struct evbuffer *buf = evbuffer_new();
	if (!buf)
	{
		puts("faiedto create response buffer");
		return;
	}
	evbuffer_add_printf(buf,"Hello:%s\n",evhttp_request_uri(req));
	evhttp_send_reply(req, HTTP_OK,"0K",buf);
}

void generic_handler(struct evhttp_request *req,void *arg)
{
	struct evbuffer *buf = evbuffer_new();
	if (!buf)
	{
		puts("failed to create response buffer");
		return;
	}

	evbuffer_add_printf(buf,"Requested:%s\n",evhttp_request_uri(req));
	evhttp_send_reply(req,HTTP_OK,"OK",buf);

}

int _tmain(int argc, _TCHAR* argv[])
{
	struct evhttp *httpd;
	WSADATA wsaData;
	DWORD Ret;
	
	if ((Ret=WSAStartup(MAKEWORD(2,2),&wsaData))!=0)
	{
		printf("WSAStartup failed with error %d\n",Ret);
		return -1;
	}

	event_init();
	httpd = evhttp_start("0.0.0.0",80);

	if (!httpd)
	{
		return -1;
	}

	evhttp_set_cb(httpd,"/",root_handler,NULL);
	evhttp_set_gencb(httpd,generic_handler,NULL);
	printf("httpdserver start OK!\n");

	event_dispatch();
	evhttp_free(httpd);

	WSACleanup();


	return 0;
}

 

3 项目配置

3.1 C/C++:

         附加包含目录,添加刚刚新建的include目录,如下图所示。

3.2 添加刚刚的lib目录

链接器>附加依赖项:

ws2_32.lib

wsock32.lib

lib\libevent.lib

lib\libevent_core.lib

lib\libevent_extras.lib

另外两个库ws2_32.lib和wsock32.lib是用来编译Windows网络相关的程序库,如下图所示。

3.3 C/C++:

代码生成-->运行库:

Debug模式下选:多线程调试 (/MTd),

Release下模式下选:多线程 (/MT)

 

3.4 编译&测试

如果顺利,运行起来,会在命令行窗口中显示“httpd server start OK!”如图所示

打开浏览器,在地址栏输入http://localhost/hell0,libevent,如果浏览器显示“Requested:/hell0.libevent”就表示代码成功。

参考链接: http://www.javashuo.com/article/p-msbhavmw-cq.html

参考链接: https://wenku.baidu.com/view/94b3ebd6f605cc1755270722192e453610665bda.html?rec_flag=default&sxts=1540776205564