Windows 上靜態編譯 Libevent 2.0.10 並實現一個簡單 HTTP 服務器

本文介紹瞭如何在 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-stablecss


1、編譯生成 Libevent 2.0.10 靜態連接庫
    一、修改
html

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

            三個文件,在文件開頭分別加上一行
                                        windows

                 #define _WIN32_WINNT 0x0500

    二、鼠標點擊Windows左下角的【開始】-【全部程序】,找到【Microsoft Visual Studio 2005】,執行下圖中的腳本:
瀏覽器

點擊在新窗口中瀏覽此圖片
    三、按照下圖中的方法編譯Libevent 2.0.10:
http://blog.s135.com/attachment/201103/libevent/libevent2.png
    四、生成的「libevent.lib」、「libevent_core.lib」、「libevent_extras.lib」三個文件就是咱們須要的 Libevent 靜態連接庫。服務器

http://blog.s135.com/attachment/201103/libevent/libevent3.png


2、利用 Libevent 靜態連接庫,實現一個簡單的 HTTP Web服務器程序
    一、打開 Visual Studio 2005,新建一個項目
http://blog.s135.com/attachment/201103/libevent/libevent4.png

    二、選擇在「d:\test」目錄內建立一個「Win32 控制檯應用程序」
點擊在新窗口中瀏覽此圖片
    三、按照下圖進行選擇
點擊在新窗口中瀏覽此圖片
    四、建立完成項目後,會自動生成「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;  
        }

    五、回到 Visual Studio 2005,在左側的【源文件】中選擇【添加】-【現有項】,將上一步建立的「httpd.c」文件添加進來。
點擊在新窗口中瀏覽此圖片
    六、在【解決方案「httpd」】上點擊鼠標右鍵,選擇【屬性】
http://blog.s135.com/attachment/201103/libevent/libevent8.png
    七、將【配置】改成「Release」
http://blog.s135.com/attachment/201103/libevent/libevent9.png
spa

    八、
    a)將
          D:\libevent-2.0.10-stable\include
    整個目錄複製到
         D:\test\httpd\include
    b)將
          D:\libevent-2.0.10-stable\WIN32-Code
    目錄內的文件
         tree.h
    和子目錄
          event2
    複製到
          D: \test\httpd\include\
    內
    c)將
          D:\libevent-2.0.10-stable\
    目錄內的全部 *.h 頭文件
    複製到
          D: \test\httpd\include\操作系統

    內
    能夠在Windows左下角的【開始】-【運行】中輸入"cmd」回車,在命令行窗口中執行如下命令,完成複製過程。
.net

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\

http://blog.s135.com/attachment/201103/libevent/libevent10.png
點擊在新窗口中瀏覽此圖片
    九、回到 Visual Studio 2005,在左側菜單中【解決方案「httpd」】下面一行【httpd】上點擊鼠標郵件,選擇【屬性】,對每項內容進行修改。下圖中紅框內的數據即爲修改後的數據。
http://blog.s135.com/attachment/201103/libevent/libevent12.png
點擊在新窗口中瀏覽此圖片
點擊在新窗口中瀏覽此圖片
點擊在新窗口中瀏覽此圖片
命令行

        注:下圖中,附加依賴項填寫:
               ws2_32.lib wsock32.lib libevent.lib libevent_core.lib libevent_extras.lib
        忽略特定庫填寫:
                libc.lib;msvcrt.lib;libcd.lib;libcmtd.lib;msvcrtd.lib

http://blog.s135.com/attachment/201103/libevent/libevent16.png
    十、完成設置後,在【解決方案「httpd」】上點擊鼠標右鍵,選擇【生成解決方案】。若是是從新編譯,能夠選擇【從新生成解決方案】。生成成功後,「d:\test\httpd\Release」目錄內的「httpd.exe」即爲生成的可執行文件。
點擊在新窗口中瀏覽此圖片
    十一、雙擊「httpd.exe」運行後,打開瀏覽器,訪問「http://127.0.0.1:8505/」,則能夠看到如下信息:一個簡單的 HTTP Web Server 輸出的內容。
點擊在新窗口中瀏覽此圖片
    十二、若是你以爲像DOS程序同樣的「httpd.exe」可執行文件圖標很差看、沒有顯示版本信息,那麼,你能夠按照下圖步驟,添加ICO圖標文件。
點擊在新窗口中瀏覽此圖片
http://blog.s135.com/attachment/201103/libevent/libevent20.png
    1三、添加版本信息
點擊在新窗口中瀏覽此圖片
http://blog.s135.com/attachment/201103/libevent/libevent22.png
    1四、大功告成,下面顯示的是帶有自定義圖標、版本信息的「httpd.exe」可執行程序。

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

附1:編譯好的 Libevent 2.0.10 靜態連接庫與 httpd 的 Visual Studio 2005 工程源代碼下載

clip_image025下載文件

點擊這裏下載文件

附2:ICO圖標製做工具下載

clip_image025[1]下載文件

點擊這裏下載文件

相關文章
相關標籤/搜索