[原]網路程式庫libevent在Visual Studio中的使用方法

來源:互聯網
上載者:User

標籤:style   blog   http   color   io   os   使用   ar   strong   

  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 }
View Code

 

[原]網路程式庫libevent在Visual Studio中的使用方法

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.