標籤:ada 特定 title gif href 運行 put 方案 tools
[文章張宴 本文版本: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?
- #include <stdio.h>
-
- #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("failed to create response buffer");
- return;
- }
-
- evbuffer_add_printf(buf, "Hello: %s\n", evhttp_request_uri(req));
- evhttp_send_reply(req, HTTP_OK, "OK", 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 main(int argc, wchar_t* 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", 8505);
- if(!httpd){
- return 1;
- }
-
- evhttp_set_cb(httpd, "/", root_handler, NULL);
- evhttp_set_gencb(httpd, generic_handler, NULL);
-
- printf("httpd server start OK!\n");
-
- event_dispatch();
-
- evhttp_free(httpd);
-
- WSACleanup();
- return 0;
- }
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
http://download.csdn.net/detail/flyingleo1981/7444051
Windows 上靜態編譯 Libevent 2.0.10 並實現一個簡單 HTTP 伺服器(圖文並茂,還有執行個體下載)