[原]网络库libevent在Visual Studio中的使用方法

  libevent是一个事件触发的网络库,适用于windows、linux、bsd等多种平台,内部使用select、epoll、kqueue等系统调用管理事件机制。著名分布式缓存软件memcached也是libevent based,而且libevent在使用上可以做到跨平台,而且根据libevent官方网站上公布的数据统计,似乎也有着非凡的性能。

1、下载编译libevent

  下载当前最新的libevent稳定版本libevent-2.0.21-stable.tar.gz安装包,解压到某个固定目录。打开Visual Studio的Command Prompt终端,进入libevent-2.0.21-stable目录,输入如下指令编译libevent代码库:

nmake /f Makefile.nmake

2、收集libevent相关头文件和库文件

  libevent编译完成后,生成的相关静态库文件包括三个:libevent.lib libevent_core.lib libevent_extras.lib,可以单独建立一个lib文件夹存放;

  相关的头文件包括三个地方:(1)libevent-2.0.12-stable\include\*   (2)libevent-2.0.12-stable\WIN32-Code\*    (3)libevent-2.0.12-stable\*.h

把这些头文件都复制一下放到一个单独的include文件夹中方便管理。

3、在VS工程中指定libevent的include和lib文件夹

  有两个地方指定:(1)新建一个工程后,在工程的“配置属性”-->“C/C++”-->“常规”-->“附加包含目录”中给出include文件夹路径;(2)直接在VS“工具”-->“选项”-->“项目和解决方案”-->“VC++目录”中给出include和lib目录路径。

  相比而言,第一种方式我发现在代码中虽然编译不会出错,但是不能自动定位头文件和函数位置;第二种方式就能够清晰定位出libevent头文件和函数的位置。

4、设置工程“运行时库”属性

  在工程的“配置属性”-->“C/C++”-->“代码生成”-->“运行时库”中选择“多线程(/MT)”。

5、设置工程依赖和忽略函数库

  在工程的“配置属性”-->“链接器”-->“输入”中指出“附加依赖项”包括:ws2_32.lib wsock32.lib libevent.lib libevent_core.lib libevent_extras.lib

  在“忽略特定库”包括:libc.lib;msvcrt.lib;libcd.lib;libcmtd.lib;msvcrtd.lib

6、测试代码

  来一段测试代码试一下:

 1 #include <stdio.h>
 2 #define WIN32_LEAN_AND_MEAN
 3 #include <windows.h>
 4 #include <winsock2.h>
 5 #include <event.h>
 6 #include <evhttp.h>
 7 void root_handler(struct evhttp_request *req, void *arg)
 8 {
 9     struct evbuffer *buf = evbuffer_new();
10     if(!buf)
11     {
12         puts("failed to create response buffer");
13         return;
14     }
15     evbuffer_add_printf(buf, "Hello: %s\n", evhttp_request_uri(req));
16     evhttp_send_reply(req, HTTP_OK, "OK", buf);
17 }
18
19 void generic_handler(struct evhttp_request *req, void *arg)
20 {
21     struct evbuffer *buf = evbuffer_new();
22     if(!buf)
23     {
24         puts("failed to create response buffer");
25         return;
26     }
27     evbuffer_add_printf(buf, "Requested: %s\n", evhttp_request_uri(req));
28     evhttp_send_reply(req, HTTP_OK, "OK", buf);
29 }
30
31 int main(int argc, wchar_t* argv[])
32 {
33     struct evhttp *httpd;
34     WSADATA wsaData;
35     DWORD Ret;
36     if ((Ret = WSAStartup(MAKEWORD(2, 2), &wsaData)) != 0)
37     {
38         printf("WSAStartup failed with error %d\n", Ret);
39         return -1;
40     }
41     event_init();
42     httpd = evhttp_start("0.0.0.0", 8505);
43     if(!httpd)
44     {
45         return 1;
46     }
47     evhttp_set_cb(httpd, "/", root_handler, NULL);
48     evhttp_set_gencb(httpd, generic_handler, NULL);
49     printf("httpd server start OK!\n");
50     event_dispatch();
51     evhttp_free(httpd);
52     WSACleanup();
53     return 0;
54 }

时间: 2024-11-05 22:45:48

[原]网络库libevent在Visual Studio中的使用方法的相关文章

[原]网络库libevent在Windows环境下使用方法

libevent是一个事件触发的网络库,适用于windows.linux.bsd等多种平台,内部使用select.epoll.kqueue等系统调用管理事件机制.著名分布式缓存软件memcached也是libevent based,而且libevent在使用上可以做到跨平台,而且根据libevent官方网站上公布的数据统计,似乎也有着非凡的性能. 1.下载编译libevent 下载当前最新的libevent稳定版本libevent-2.0.21-stable.tar.gz安装包,解压到某个固定目

Visual Studio 中快速创建方法 Generate a method in Visual Studio

2020-04-04 https://docs.microsoft.com/en-us/visualstudio/ide/reference/generate-method?view=vs-2019 微软官方---快速创建函数方法 原文地址:https://www.cnblogs.com/chenlight/p/12631440.html

Visual Studio中根据系统区分引用64位、32位DLL动态库文件的配置方法

原来使用Win7的32位系统,进行C#工程的开发,后来重装系统,换成了win7的64位系统 调试原来的工程,由于在其中引用了"SQLite"的32位的dll,导致在64为位下程序无法运行(但是编译可以通过) 后来通过修改工程文件(.csproj),在其中设置引用的条件,解决了问题 打开引用了SQLite的工程(例如叫做info)的工程文件(info.csproj),找到对SQLite引用的语句,类似如下的代码 代码如下: <Reference Include="Syst

Visual Studio 中的 .NET Framework 类库

Visual Studio 中的 .NET Framework 类库 .NET Framework 类库由命名空间组成.每个命名空间都包含可在程序中使用的类型:类.结构.枚举.委托和接口. 当您在 Visual Studio 中创建 Visual Basic 或 Visual C# 项目时,已经引用了最常用的基类 DLL(程序集).但是,如果您需要使用尚未引用的 DLL 中的类型,则需向此 DLL 添加引用.有关更多信息,请参见添加和移除引用. 以下主题提供了下列信息: 每个功能区域的最重要命名

[转]如何在 Visual Studio 中使用 Git 同步代码到 CodePlex

本文转自:http://www.cnblogs.com/stg609/p/3673782.html 开源社区不管在国内还是国外都很火热,微软也曾因为没有开源而倍受指责,但是随着 .Net framework.ASP.Net MVC等框架的逐渐开源,也让大家看到了微软开源的步伐.CodePlex 则是微软自己的一个开源社区,里面聚集了很多开源的项目,那么我们如何才能把自己的开源项目放到这上面呢? 在继续阅读本文前,请确定您已经在 Visual Studio 中安装了 Git 相关的扩展程序,并且大

在Visual Studio中入门F#

写在前面的话 个人由某方面的兴趣需要学习 F#,网络上有关F#的中文资料很少,微软官方有很不错的文档,但是很可惜的是绝大部分的章节都是英文的.个人是一位.NET爱好者,想自己将 F# 的官方文档翻译出来,算是为了自己喜欢的 .NET 做一些贡献. 原文链接 Getting started with F# in Visual Studio 在这篇文章中 安装 F# 创建一个控制台应用程序 编写您的代码 运行您的代码 使用 F# Interactive 在 Visual Studio IDE 中支持

Visual Studio中的环境变量(以Visual Studio 2013为例)

前言 本文总结了Visual Studio中常见的环境变量及其在组织解决方案.工程中的作用. 注:本文使用的是Visual Studio 2013,由于作者主要从事C/C++开发,所以是以Visual C++的工作环境配置来描述. 什么是vs的环境变量? 先看图吧,图中以美元符号$开头 + 一对括号,这样进行引用的就是我所谓的环境变量, 图中出现的几个环境变量含义如下: 环境变量名 含义 $(SolutionDir) 解决方案目录:即.sln文件所在路径 $(Configuration) 当前的

Visual Studio中的/MD, /MT, /MDd, /MTd 选项

Visual Studio中/MD, /MT, /MDd, /MTd表示多线程模块是否为dll.对于这几个选项我的理解如下: /MD: 定义了_MT和_DLL,让程序用多线程和dll版本的运行库. /MT: 让程序用多线程和静态版本的运行库. /MDd: 定义了_MT._DLL._DEBUG,让程序用debug模式下多线程和dll版本的运行库. /MTd: 定义了_MT和_DEBUG,让程序用debug模式下的多线程和静态版本的运行库. 参考资料:https://msdn.microsoft.c

在Visual&#160;Studio中调试C/C++&#160;mexFunction文件

C/C++ MEX文件:也称为MEX源码文件,就是就是普通的fortran/C/C++文件,只是其中定义了一个mexFunction的接口,用于和MATLAB通讯,使用mex()函数可以将其编译为MATLAB MEX文件.至于如何书写mex源码文件,您可以看下MATLAB的帮助文档! MATLAB MEX文件:也称为MEX二进制文件,是一种动态链接库,可以在MATLAB像普通函数一样直接调用或运行,windows平台下的扩展名为mexw32或者mexw64.使用mex()可以将MEX源码文件编译