本文介紹瞭如何在 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”三個文件,在文件開頭分別加上一行:
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”文件,內容如下:
- #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”回車,在命令行窗口中執行以下命令,完成複製過程。
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】上點擊鼠標郵件,選擇【屬性】,對每項內容進行修改。下圖中紅框內的數據即爲修改後的數據。
注:下圖中,附加依賴項填寫:
忽略特定庫填寫:
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”可執行程序。