1. 程式人生 > >libevent學習之二:Windows7(Win7)下編譯libevent

libevent學習之二:Windows7(Win7)下編譯libevent

Linux下編譯參考原始碼中的README檔案即可,這裡主要記錄Windows下的編譯。

一.準備工作

去官網下載最新的穩定釋出版本libevent-2.0.22-stable

二.使用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

但是並沒有說明為什麼要新增,而且我沒新增,編譯和使用時也沒什麼問題。

4.編譯結果

編譯成功後,在libevent-2.0.22-stable目錄下生成如下三個庫檔案。

libevent.lib
libevent_core.lib
libevent_extras.lib

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檔案如下所示:

QT += core
QT -= gui

CONFIG += c++11

TARGET = server
CONFIG += console
CONFIG -= app_bundle

TEMPLATE = app

SOURCES += main.cpp

INCLUDEPATH += include

LIBS += $$PWD/lib/libevent.lib \
        $$PWD/lib/libevent_core.lib \
        $$PWD/lib/libevent_extras.lib \

LIBS += -lWs2_32 -lAdvapi32
windows下socket通訊需要載入Ws2_32.lib,這個大家都知道,至於為何需要Advapi32.lib,可以參考:LNK2019:無法解析的外部符號[email protected]
然後將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檔案如下所示:

QT += core
QT -= gui

CONFIG += c++11

TARGET = server
CONFIG += console
CONFIG -= app_bundle

TEMPLATE = app

SOURCES += main.cpp

INCLUDEPATH += include

LIBS += $$PWD/lib/libevent.a \
        $$PWD/lib/libevent_core.a \
        $$PWD/lib/libevent_extra.a \

LIBS += -lWs2_32 -lAdvapi32

DEFINES += WIN32
注意和“使用VS2012編譯”的pro檔案相比,多了最後的DEFINES += WIN32,否則編譯工程時會報錯。

當然此時編譯工程使用的Qt版本是Qt 5.5.1 MingW。

一個例子:


相關推薦

libevent學習Windows7(Win7)編譯libevent

Linux下編譯參考原始碼中的README檔案即可,這裡主要記錄Windows下的編譯。一.準備工作去官網下載最新的穩定釋出版本libevent-2.0.22-stable二.使用VS2012編譯1.解

Docker的Kafka學習搭建叢集環境

在上一章《Docker下的Kafka學習之一:製作叢集用的映象檔案》中,我們把繼承了zookeeper和kafka的映象做好了,現在我們就用這個映象來搭建Kafka叢集環境。 Docker軟體版本 本次實戰的電腦作業系統是Win10專業版,安裝的Dock

linux學習日常的基礎命令收集

幫助文檔 gedit 查看 日期 取整 style 位置 某月 linux 1、 ls 2、pwd  顯示當前目錄所在位置 3、date  日期時間 4、cal  日歷   默認顯示當前該月   cal 2012 :查看2012年的日歷   cal 月 年 : 查看某年某月

Halcon學習攝像頭獲取圖像和相關參數

digg tail tours mage eight sta vision name pict 1、close_all_framegrabbers ( : : : ) 關閉所有圖像采集設備。 2、close_framegrabber ( : : AcqHand

linux學習Linux磁盤與文件管理系統

roo 針對 mkf 維護 def 都是 linu mke2fs remount 上次寫了Linux檔案與操作,這次繼續寫Linux磁盤與文件管理系統。 首先,我們要先來認識一下EXT2文件系統,這是Linux最傳統的磁盤系統。 1.EXT2文件系統 在說文件系統以前還是要

Docker學習Docker基本簡單操作命令

查詢tomcat映象; docker search tomcat 進入容器 docker exec -it 458(容器ID) /bin/bash 檢視容器完整id docker inspect 14b7 | grep Id 上傳war包到docker docker te

USB開裝置開發學習 USB具體通訊過程(含列舉過程)

原文:https://blog.csdn.net/go_str/article/details/80802452  前言     現在剛開始接觸USB的開發,零零散散學習了一些USB基礎知識,但是卻得不到連貫。在這個學習過程中首先困惑的就是USB

六天搞懂“深度學習神經網路

注意對比左右兩個框圖,用神經網路代替模型,用學習規則代替機器學習。 因此,神經網路是實現機器學習的一種重要模型,確定模型(神經網路)的過程稱為學習規則。 大腦與神經網路的類比:大腦的神經元對應神經網路的節點,大腦的神經元連線對應神經網路的連線權值。 三輸入的神經

虛擬機器學習垃圾收集器和記憶體分配策略

1.物件是否可回收 1.1引用計數演算法 引用計數演算法:給物件中新增一個引用計數器,每當有一個地方引用它時,計數器值就加1;當引用失效時,計數器值就減1;任何時候計數器值為0的物件就是不可能再被使用的物件。 客觀來說,引用計數演算法的實現簡單,判定效率高,在大部分情況下都是

機器學習決策樹

本文為作者學習K近鄰演算法後的整理筆記,僅供學習使用! 決策樹 1、概述    決策樹(Decision Tree)實在已知各種情況發生概率的基礎上,通過構成決策樹來求取淨現值的期望值大於等於0的概率,評價專案風險,判斷其可行性的決策分析方法,是直觀運用概率分析的一種圖

C++11併發學習執行緒管理

1.啟動執行緒 (1)使用物件 “小試牛刀”中thread構造時傳入的是函式,還可以傳入物件。 #include <thread> #include <iostream>   void func() {     std::cout<<

超級賬本學習瞭解Peer

在進一步瞭解超級賬本以前,我覺得有必要了解一些基本概念,這些概念可以在官方文件中找到。其中,特別重要的是關於Peer的一些理解。在這裡我嘗試去翻譯這篇文章,同時加入我自己的一些理解。關於Peers區塊鏈網路主要由一系列的Peers節點組成。Peers是整個網路的基礎,因為它是

Directx3D9學習Windows程式設計最簡單視窗程式

Window style 視窗的風格,定義了一些視窗外觀和表現的標誌組合,WS_OVERLAPPEDWINDO是幾個標誌結合的位或,包含最小化,最大化按鈕,邊框,標題欄等等 第五個引數: Size and position 位置和大小 CW_USEDEFAULT 使用預設值 第六個引數: Parent

JBPM4.4學習第一個流程例項

1)建立專案和相關配置 在eclipse中建立一個Java Project,將jbpm4.jar和lib資料夾下的第三方jar包Add到專案中。 按照個人習慣,建立config和jbpm兩個原始檔夾,用於放配置檔案和jbpm流程定義檔案。 將jbpm-4.4/exam

libevent學習簡單的伺服器和客戶端

1.伺服器#include <stdio.h> #include <time.h> #include <event2/bufferevent.h> #include <event2/buffer.h> #include <

vue學習vue-router簡單配置搭建單頁應用

    現在很多主流的vue專案都是採用的單頁路由模式來搭建的,我們也來趕個時尚,採用的官方提供的vue-router來構建一個簡單的企業站。如果還不知道vue-router路由機制的,請右轉直走:https://router.vuejs.org/zh-cn/,先把基礎教

python學習python資料結構和記憶體管理

python資料結構和記憶體管理思維導圖:對於資料結構的學習主要從這幾方面入手:初始化常用操作(增刪該查)常用內建函式,注意點有序序列主要分為字串,列表,和元組,一.有序序列定義:str1=‘python’//字串l1=['python','java','c',100]  o

django學習django配置mysql

修改D:\Python26\Scripts\myproject\myproject/settings.py中的DATABASES = { 'default': { #'ENGINE': 'dja

libevent學習VS2013除錯libevent原始碼

今天就介紹一下vs2013 下面除錯libevent原始碼。不需要建立sln解決方案,只需要建立工程,包含 原始碼目錄即可原始碼除錯。  1、手工新增test/print-winsocke-errors.c檔案,不然nmake編譯的時候會報錯。

Tomcat學習tomcat安裝、配置及目錄檔案說明

一、下載JDK和Tomcat 二、安裝JDK         點選JDK應用程式預設安裝即可,記下JDK的安裝目錄(例如:C:\Program Files\Java\jdk1.7.0_45)。 三、配置JDK和Tomcat         1. 配置JDK