libevent windows 編譯

[文章作者:張宴 本文版本:v1.0 最後修改:2011.03.30 轉載請註明原文鏈接:http://blog.s135.com/libevent_windows/]

  本文介紹瞭如何在 Windows 操作系統中,利用微軟 Visual Studio 2005 編譯生成 Libevent 2.0.10 靜態鏈接庫,並利用 Libevent 靜態鏈接庫,實現一個簡單的 HTTP Web服務器程序:httpd.exe。

  假設 Visual Studio 2005 的安裝路徑爲“D:\Program Files\Microsoft Visual Studio 8\”,Libevent 2.0.10 解壓後的路徑爲“D:\libevent-2.0.10-stable”。



  一、編譯生成 Libevent 2.0.10 靜態鏈接庫。
  
  1、修改“D:\libevent-2.0.10-stable\event_iocp.c”、“D:\libevent-2.0.10-stable\evthread_win32.c”、“D:\libevent-2.0.10-stable\listener.c”三個文件,在文件開頭分別加上一行:
#define _WIN32_WINNT 0x0500


  2、鼠標點擊Windows左下角的【開始】-【所有程序】,找到【Microsoft Visual Studio 2005】,執行下圖中的腳本:

  點擊在新窗口中瀏覽此圖片


  3、按照下圖中的方法編譯Libevent 2.0.10:

  點擊在新窗口中瀏覽此圖片


  4、生成的“libevent.lib”、“libevent_core.lib”、“libevent_extras.lib”三個文件就是我們需要的 Libevent 靜態鏈接庫。

  點擊在新窗口中瀏覽此圖片



  二、利用 Libevent 靜態鏈接庫,實現一個簡單的 HTTP Web服務器程序

  1、打開 Visual Studio 2005,新建一個項目

  點擊在新窗口中瀏覽此圖片


  2、選擇在“d:\test”目錄內創建一個“Win32 控制檯應用程序”

  點擊在新窗口中瀏覽此圖片


  3、按照下圖進行選擇

  點擊在新窗口中瀏覽此圖片


  4、創建完成項目後,會自動生成“d:\test\httpd\”目錄,在該目錄內創建一個“httpd.c”文件,內容如下:
  1. #include <stdio.h>  
  2.   
  3. #define WIN32_LEAN_AND_MEAN  
  4. #include <windows.h>  
  5. #include <winsock2.h>  
  6.   
  7. #include <event.h>  
  8. #include <evhttp.h>  
  9.   
  10. void root_handler(struct evhttp_request *req, void *arg)  
  11. {  
  12.     struct evbuffer *buf = evbuffer_new();  
  13.     if(!buf){  
  14.         puts("failed to create response buffer");  
  15.         return;  
  16.     }  
  17.   
  18.     evbuffer_add_printf(buf, "Hello: %s\n", evhttp_request_uri(req));  
  19.     evhttp_send_reply(req, HTTP_OK, "OK", buf);  
  20. }  
  21.   
  22. void generic_handler(struct evhttp_request *req, void *arg)  
  23. {  
  24.     struct evbuffer *buf = evbuffer_new();  
  25.     if(!buf){  
  26.         puts("failed to create response buffer");  
  27.         return;  
  28.     }  
  29.   
  30.     evbuffer_add_printf(buf, "Requested: %s\n", evhttp_request_uri(req));  
  31.     evhttp_send_reply(req, HTTP_OK, "OK", buf);  
  32. }  
  33.   
  34. int main(int argc, wchar_t* argv[])  
  35. {  
  36.   struct evhttp *httpd;  
  37.   
  38.   WSADATA wsaData;  
  39.   DWORD Ret;  
  40.   if ((Ret = WSAStartup(MAKEWORD(2, 2), &wsaData)) != 0)  {  
  41.     printf("WSAStartup failed with error %d\n", Ret);  
  42.     return -1;  
  43.   }  
  44.   
  45.     event_init();  
  46.   
  47.     httpd = evhttp_start("0.0.0.0", 8505);  
  48.     if(!httpd){  
  49.     return 1;  
  50.   }  
  51.   
  52.     evhttp_set_cb(httpd, "/", root_handler, NULL);  
  53.     evhttp_set_gencb(httpd, generic_handler, NULL);  
  54.   
  55.   printf("httpd server start OK!\n");  
  56.   
  57.     event_dispatch();  
  58.   
  59.     evhttp_free(httpd);  
  60.   
  61.   WSACleanup();  
  62.     return 0;  
  63. }  


  5、回到 Visual Studio 2005,在左側的【源文件】中選擇【添加】-【現有項】,將上一步創建的“httpd.c”文件添加進來。

  點擊在新窗口中瀏覽此圖片


  6、在【解決方案“httpd”】上點擊鼠標右鍵,選擇【屬性】

  點擊在新窗口中瀏覽此圖片


  7、將【配置】改爲“Release”

  點擊在新窗口中瀏覽此圖片


  8、將“D:\libevent-2.0.10-stable\include”整個目錄複製到“D:\test\httpd\include”;將“D:\libevent-2.0.10-stable\WIN32-Code”目錄內的“tree.h”文件和“event2”子目錄,複製到“D:\test\httpd\include\”內;將“D:\libevent-2.0.10-stable\”目錄內的所有“*.h”頭文件複製到“D:\test\httpd\include\”內。可以在Windows左下角的【開始】-【運行】中輸入“cmd”回車,在命令行窗口中執行以下命令,完成複製過程。
mkdir D:\test\httpd\include\
xcopy /E /H /R D:\libevent-2.0.10-stable\include\* D:\test\httpd\include\
xcopy /E /H /R D:\libevent-2.0.10-stable\WIN32-Code\* D:\test\httpd\include\
xcopy /E /H /R D:\libevent-2.0.10-stable\*.h D:\test\httpd\include\


  點擊在新窗口中瀏覽此圖片

  點擊在新窗口中瀏覽此圖片


  9、回到 Visual Studio 2005,在左側菜單中【解決方案“httpd”】下面一行【httpd】上點擊鼠標郵件,選擇【屬性】,對每項內容進行修改。下圖中紅框內的數據即爲修改後的數據。

  點擊在新窗口中瀏覽此圖片

  點擊在新窗口中瀏覽此圖片

  點擊在新窗口中瀏覽此圖片

  點擊在新窗口中瀏覽此圖片


  注:下圖中,附加依賴項填寫:
ws2_32.lib wsock32.lib libevent.lib libevent_core.lib libevent_extras.lib

  忽略特定庫填寫:
libc.lib;msvcrt.lib;libcd.lib;libcmtd.lib;msvcrtd.lib

  點擊在新窗口中瀏覽此圖片


  10、完成設置後,在【解決方案“httpd”】上點擊鼠標右鍵,選擇【生成解決方案】。如果是重新編譯,可以選擇【重新生成解決方案】。生成成功後,“d:\test\httpd\Release”目錄內的“httpd.exe”即爲生成的可執行文件。

  點擊在新窗口中瀏覽此圖片


  11、雙擊“httpd.exe”運行後,打開瀏覽器,訪問“http://127.0.0.1:8505/”,則可以看到以下信息:一個簡單的 HTTP Web Server 輸出的內容。

  點擊在新窗口中瀏覽此圖片


  12、如果你覺得像DOS程序一樣的“httpd.exe”可執行文件圖標不好看、沒有顯示版本信息,那麼,你可以按照下圖步驟,添加ICO圖標文件。

  點擊在新窗口中瀏覽此圖片

  點擊在新窗口中瀏覽此圖片


  13、添加版本信息

  點擊在新窗口中瀏覽此圖片

  點擊在新窗口中瀏覽此圖片


  14、大功告成,下面顯示的是帶有自定義圖標、版本信息的“httpd.exe”可執行程序。

  點擊在新窗口中瀏覽此圖片
發佈了28 篇原創文章 · 獲贊 1 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章