zoukankan      html  css  js  c++  java
  • libevent学习之二:Windows7(Win7)下编译libevent

    Linux下编译参考源码中的README文件即可,这里主要记录Windows下的编译。

    一.准备工作

    去官网下载最新的稳定发布版本libevent-2.0.22-stable

    官网地址:http://libevent.org/

    二.使用VS2012编译

    1.解压libevent到C:UserszhangDesktoplibevent-2.0.22-stable

    2.打开“VS2012开发人员命令提示”工具,如下图所示。

    3.输入指令开始编译,如下图所示。

    有网友说编译之前应该在以下3个文件开头添加“#define _WIN32_WINNT 0x0500”

    libevent-2.0.22-stableevent_iocp.c
    libevent-2.0.22-stableevthread_win32.c
    libevent-2.0.21-stablelistener.c

    但是并没有说明为什么要添加,而且我没添加,编译和使用时也没什么问题。

    后来还是查了一下_WIN32_WINNT的意义,可以参考:修改WINVER、_WIN32_WINNT和_MSC_VER

    4.编译结果

    编译成功后,在libevent-2.0.22-stable目录下生成如下三个库文件。

    libevent.lib
    libevent_core.lib
    libevent_extras.lib

    至于这三个库文件的功能,可以参考:libevent学习之一:libevent源码的特点和结构

    5.测试

    我使用的开发工具是Qt 5.5.1 VS2012。

    新建一个控制台工程,在工程根目录中新建“include”文件夹,然后进行如下三步操作。

    (1)将C:UserszhangDesktoplibevent-2.0.22-stableincludeevent2文件夹拷贝到工程的“include”文件夹

    (2)将C:UserszhangDesktoplibevent-2.0.22-stableWIN32-Codeevent2event-config.h文件拷贝到工程的“includeevent2”文件夹

    (3)将C:UserszhangDesktoplibevent-2.0.22-stableWIN32-Code ree.h文件拷贝到工程的“include”文件夹

    在工程根目录中新建“lib”文件夹,将生成的三个库文件拷贝到该文件夹。

    pro文件如下所示:

    [cpp] view plain copy
     
     在CODE上查看代码片派生到我的代码片
    1. QT += core  
    2. QT -= gui  
    3.   
    4. CONFIG += c++11  
    5.   
    6. TARGET = server  
    7. CONFIG += console  
    8. CONFIG -= app_bundle  
    9.   
    10. TEMPLATE = app  
    11.   
    12. SOURCES += main.cpp  
    13.   
    14. INCLUDEPATH += include  
    15.   
    16. LIBS += $$PWD/lib/libevent.lib   
    17.         $$PWD/lib/libevent_core.lib   
    18.         $$PWD/lib/libevent_extras.lib   
    19.   
    20. LIBS += -lWs2_32 -lAdvapi32  

    windows下socket通信需要加载Ws2_32.lib,这个大家都知道,至于为何需要Advapi32.lib,可以参考:LNK2019:无法解析的外部符号_imp_CryptAcquireContextA@20
    然后将libevent自带的例子C:UserszhangDesktoplibevent-2.0.22-stablesample|hello-world.c拷贝到工程中并编译。需要注意的是编译时有两处  C2440:“初始化”:无法从“void *”转换为“event_base *”  的错误,强制转换一下即可。

    这是一个简单的服务器的例子。

    三.使用MingW编译

    1.下载安装MSYS-1.0.11,安装后将c:MinGWmsys1.0etc 中的fstab.sample文件重命名为fstab,并将fstab中的内容改为c:/Qt/Qt5.5.1/Tools/mingw492_32 /mingw,这里使用Qt自带的mingw版本,注意路径c:/Qt/Qt5.5.1/Tools/mingw492_32和/mingw之间有空格
    2.打开MSYS,cd 到C:UserszhangDesktoplibevent-2.0.22-stable目录,./configure ,make,make install,安装成功后,生成静态库,如下所示。

    c:MinGWmsys1.0localliblibevent.a,

    c:MinGWmsys1.0localliblibevent_corelibevent.a,

    c:MinGWmsys1.0localliblibevent_extra.a

    将这三个库文件拷贝到工程“lib”目录中。
    将下图所示的头文件拷贝到工程“linclude”目录中。

    3.测试

    还是用那个简单服务器的例子。

    pro文件如下所示:

    [cpp] view plain copy
     
     在CODE上查看代码片派生到我的代码片
    1. QT += core  
    2. QT -= gui  
    3.   
    4. CONFIG += c++11  
    5.   
    6. TARGET = server  
    7. CONFIG += console  
    8. CONFIG -= app_bundle  
    9.   
    10. TEMPLATE = app  
    11.   
    12. SOURCES += main.cpp  
    13.   
    14. INCLUDEPATH += include  
    15.   
    16. LIBS += $$PWD/lib/libevent.a   
    17.         $$PWD/lib/libevent_core.a   
    18.         $$PWD/lib/libevent_extra.a   
    19.   
    20. LIBS += -lWs2_32 -lAdvapi32  
    21.   
    22. DEFINES += WIN32  

    注意和“使用VS'2012编译”的pro文件相比,多了最后的DEFINES += WIN32,否则编译工程时会报错。
    当然此时编译工程使用的Qt版本是Qt 5.5.1 MingW。

    http://blog.csdn.net/caoshangpa/article/details/52838156

  • 相关阅读:
    SDN实验2:Mininet 实验——拓扑的命令脚本生成
    2020软工实践第一次作业
    POJ2942-Knights of the Round Table
    POJ1966 ZOJ2182<无向图点连通度 Isap版>
    POJ1523(求割点)
    POJ2391(最大流Isap+Floyd+二分)
    POJ1087 ZOJ1157(最大流Isap+map映射)
    POJ1459(最大流Isap)
    数字的字符串处理 (转)
    POJ2112 最大流(Isap+Floyd+二分)
  • 原文地址:https://www.cnblogs.com/findumars/p/5971292.html
Copyright © 2011-2022 走看看