Windows 上靜態編譯 Libevent 2.0.10 並實現一個簡單 HTTP 伺服器(無數截圖)

來源:互聯網
上載者:User

標籤:自動產生   file   entry   顯示   tail   2.0   uip   服務   左側菜單   

[文章張宴 本文版本: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”檔案,內容如下:

view plainprint?
  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”可執行程式。

  


  附1:編譯好的 Libevent 2.0.10 靜態連結庫與 httpd 的 Visual Studio 2005 工程原始碼下載

下載檔案點擊這裡下載檔案



  附2:ICO表徵圖製作工具下載

下載檔案點擊這裡下載檔案

 

http://blog.csdn.net/flyingleo1981/article/details/28400859

Windows 上靜態編譯 Libevent 2.0.10 並實現一個簡單 HTTP 伺服器(無數)

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.