windows 平臺使用 VS2017 編譯 libevent 源碼

一 依賴庫編譯

先要將其依賴的庫編譯好,其中openssl需要編譯到libevent中,編譯成libevent_openssl.lib庫,zlib在新版本中只有示例用到。

1)windows 平臺使用 VS2017 編譯 openssl 源碼

參考前面的文章

openssl 默認編譯到 C:\Program Files (x86)\OpenSSL 目錄,包含收文件,lib文件和dll文件,待會需要配置此路徑,或者直接把編譯好的openssl庫復(fù)制到指定路徑中。

2)使用 VS2017 編譯 zlib 源碼

1) 官方網(wǎng)站

http://www.zlib.net/

2)編譯工具:VS2017社區(qū)版本

下載地址

http://ffmpeg.club/tools_download.html

3)下載zlib1.2.11源碼

下載地址

http://ffmpeg.club/libevent.html

4) 編譯步驟

(1)進入控制臺(運行 CMD),或者編寫批處理bat文件

(2)運行vs編譯環(huán)境

打開菜單中VS2017中有對應(yīng)的命令行工具,把地址復(fù)制過來

編譯32位庫版本

C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build\vcvarsamd64_x86.bat

編譯64位庫版本

"C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build\vcvars64.bat"

運行后出現(xiàn)如下內(nèi)容?

(3)進入zlib源碼嗎目錄

cd zlib-1.2.11

(4)用nmake編譯

nmake -f win32/Makefile.msc -

編譯好后生成的動態(tài)庫 zdll.dll zdll.lib 和靜態(tài)庫zlib.lib都在zlib-1.2.11根目錄下。

二 libevent編譯環(huán)境準(zhǔn)備

操作系統(tǒng):windows 10 64位

編譯工具:VS2017社區(qū)版本

下載地址

http://ffmpeg.club/tools_download.html

libevent 2.1.8 源碼

下載地址

http://www.libevent.net/download

三 編譯libevent源碼

1)依賴安裝編譯

編譯工具:VS2017社區(qū)版本

下載地址

http://ffmpeg.club/tools_download.html

編譯好openssl安裝后復(fù)制到 D:\lib\openssl 路徑

libevent_openssl.lib 庫需要,如果不用此庫可以不編譯openssl

編譯好zlib 安裝在D:\libevent\zlib-1.2.11\

新版本libevent已經(jīng)和zlib分離,但是示例有用zlib,如果不需要此示例可以不編譯zlib

2) 編譯步驟

(1)進入控制臺(運行 CMD),或者編寫批處理bat文件

(2)運行vs編譯環(huán)境

打開菜單中VS2017中有對應(yīng)的命令行工具,把地址復(fù)制過來

編譯32位庫版本

C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build\vcvarsamd64_x86.bat

編譯64位庫版本

"C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build\vcvars64.bat"

(3)進入libevent源碼嗎目錄

cd libevent-master

(4)清理之前的編譯

nmake /f Makefile.nmake clean

(5)編譯libevent

nmake /f Makefile.nmake OPENSSL_DIR=D:\lib\openssl

OPENSSL_DIR 是openssl庫的路徑,之前版本需要制定zlib庫路徑,新版本不需要

(6)編譯包含了libevent的庫項目和示例項目,編譯的示例項目由于用了zlib并且openssl版本比較舊,所以會產(chǎn)生問題

3)編譯中出現(xiàn)的問題

(1)示例中的openssl問題

出現(xiàn)的問題

編譯錯誤、會顯示找不到openssl的ssleay32.lib和libeay32.lib庫

原因

舊版本的openssl和新版本采用不同庫名

解決方案

打開test目錄下的Makefile.nmake

找到 SSL_LIBS=..\libevent_openssl.lib $(OPENSSL_DIR)\lib\libeay32.lib $(OPENSSL_DIR)\lib\ssleay32.lib gdi32.lib User32.lib

修改為 SSL_LIBS=..\libevent_openssl.lib $(OPENSSL_DIR)\lib\libssl.lib $(OPENSSL_DIR)\lib\libcrypto.lib gdi32.lib User32.lib

(2)示例中的zlib問題

出現(xiàn)的問題

默認不編譯zlib示例,設(shè)置編譯后找不到zlib庫和頭文件

解決方案

在編譯libevent之前設(shè)置編譯zlib示例

修改WIN32-Code\nmake\event2\event-config.h

添加#define EVENT__HAVE_LIBZ

修改原因在示例代碼test\regress_bufferevent.c 1382行中做了如下判斷

#ifdef EVENT__HAVE_LIBZ

LEGACY(bufferevent_zlib, TT_ISOLATED),

#else

{ "bufferevent_zlib", NULL, TT_SKIP, NULL, NULL },

#endif

修改zlib示例的編譯項目

打開test目錄下的Makefile.nmake

修改LIBS,設(shè)置zlib庫文件路徑

LIBS=..\libevent.lib ws2_32.lib shell32.lib advapi32.lib D:\libevent\zlib-1.2.11\zdll.lib

修改CFLAGS添加zlib頭文件路徑

CFLAGS=/I.. /I../WIN32-Code /I../WIN32-Code/nmake /I../include /I../compat /DHAVE_CONFIG_H /DTINYTEST_LOCAL $(SSL_CFLAGS) -ID:\libevent\zlib-1.2.11

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容