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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM