libevent学习之二:Windows7(Win7)下编译libevent

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

一.准备工作

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

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

二.使用VS2012编译

1.解压libevent到C:\Users\zhang\Desktop\libevent-2.0.22-stable

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

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

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

libevent-2.0.22-stable\event_iocp.c
libevent-2.0.22-stable\evthread_win32.c
libevent-2.0.21-stable\listener.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:\Users\zhang\Desktop\libevent-2.0.22-stable\include\event2文件夹拷贝到工程的“include”文件夹

(2)将C:\Users\zhang\Desktop\libevent-2.0.22-stable\WIN32-Code\event2\event-config.h文件拷贝到工程的“include\event2”文件夹

(3)将C:\Users\zhang\Desktop\libevent-2.0.22-stable\WIN32-Code\tree.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:\Users\zhang\Desktop\libevent-2.0.22-stable\sample|h\ello-world.c拷贝到工程中并编译。需要注意的是编译时有两处  C2440:“初始化”:无法从“void *”转换为“event_base *”  的错误,强制转换一下即可。

 

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

三.使用MingW编译

1.下载安装MSYS-1.0.11,安装后将c:\MinGW\msys\1.0\etc 中的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:\Users\zhang\Desktop\libevent-2.0.22-stable目录,./configure ,make,make install,安装成功后,生成静态库,如下所示。

c:\MinGW\msys\1.0\local\lib\libevent.a,

c:\MinGW\msys\1.0\local\lib\libevent_corelibevent.a,

c:\MinGW\msys\1.0\local\lib\libevent_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

posted @ 2016-10-17 21:13  findumars  Views(1782)  Comments(0Edit  收藏  举报