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]下载文件

点击这里下载文件

相关文章
相关标签/搜索