windows 平臺使用 VS2017 編譯 libevent 源碼

一 依賴庫編譯

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

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

  • 參考前面的文章
  • openssl 默認編譯到 C:\Program Files (x86)\OpenSSL 目錄,包含收文件,lib文件和dll文件,待會需要配置此路徑,或者直接把編譯好的openssl庫複製到指定路徑中。

2)使用 VS2017 編譯 zlib 源碼

1) 官方網站

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

3)下載zlib1.2.11源碼

4) 編譯步驟

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

  • (2)運行vs編譯環境

    • 打開菜單中VS2017中有對應的命令行工具,把地址複製過來
    • 編譯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"

    運行後出現如下內容 image

  • (3)進入zlib源碼嗎目錄

    • cd zlib-1.2.11
  • (4)用nmake編譯

    • nmake -f win32/Makefile.msc -image編譯好後生成的動態庫 zdll.dll zdll.lib 和靜態庫zlib.lib都在zlib-1.2.11根目錄下。

二 libevent編譯環境準備

操作系統:windows 10 64位

編譯工具:VS2017社區版本

libevent 2.1.8 源碼

三 編譯libevent源碼

1)依賴安裝編譯

  • 編譯工具:VS2017社區版本
  • 編譯好openssl安裝後複製到 D:\lib\openssl 路徑
    • libevent_openssl.lib 庫需要,如果不用此庫可以不編譯openssl
  • 編譯好zlib 安裝在D:\libevent\zlib-1.2.11\
    • 新版本libevent已經和zlib分離,但是示例有用zlib,如果不需要此示例可以不編譯zlib

2) 編譯步驟

  • (1)進入控制檯(運行 CMD),或者編寫批處理bat文件
  • (2)運行vs編譯環境
    • 打開菜單中VS2017中有對應的命令行工具,把地址複製過來
    • 編譯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版本比較舊,所以會產生問題

3)編譯中出現的問題

  • (1)示例中的openssl問題
    • 出現的問題
      • 編譯錯誤、會顯示找不到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問題
    • 出現的問題
      • 默認不編譯zlib示例,設置編譯後找不到zlib庫和頭文件
    • 解決方案
      • 在編譯libevent之前設置編譯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,設置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
          • 相關視頻如下
          • https://edu.csdn.net/course/detail/23758
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章