win10使用cmake編譯libevent(解決依賴openssl)


概述

  • win10沒有安裝openssl
  • cmake version: 3.18
  • libevent version: 2.1.10-stable
  • libevent目前的版本中寫好了 CMakeLists.txt, 如果有興趣, 可以自己配置一個更加簡明的配置文件
  • 本文將介紹兩種方式編譯libevent: A、不依賴openssl, B、依賴openssl

先介紹不依賴openssl

先介紹不依賴openssl

先介紹不依賴openssl

附 cmake生成解決方案的截圖

cmake提示沒有安裝openssl

cmake配置

提示信息


可能看不清楚? 提示錯誤如下:

CMake Error at C:/xxxxx/cmake-3.18/Modules/FindPackageHandleStandardArgs.cmake:165 (message):
  Could NOT find OpenSSL, try to set the path to OpenSSL root folder in the
  system variable OPENSSL_ROOT_DIR (missing: OPENSSL_CRYPTO_LIBRARY
  OPENSSL_INCLUDE_DIR)
Call Stack (most recent call first):
  C:/xxxxx/cmake_64/share/cmake-3.18/Modules/FindPackageHandleStandardArgs.cmake:458 (_FPHSA_FAILURE_MESSAGE)
  C:/xxxxx/cmake_64/share/cmake-3.18/Modules/FindOpenSSL.cmake:486 (find_package_handle_standard_args)
  CMakeLists.txt:811 (find_package)


Configuring incomplete, errors occurred!

結果很明顯,Configuring incomplete已經提示,配置失敗了。 從提示中的CMakeLists.txt:811 (find_package)可知,最近依次執行到配置文件的811行。

敲黑板, 下面開始改進配置文件

打開libevent目錄

找到 CMakeLists.txt文件

就是它,打開它,記事本或者其他工具打開,找到上報錯中提示的811行。

811行前后代碼如下

if(EVENT__HAVE_EVENT_PORTS)
    list(APPEND SRC_CORE evport.c)
endif()

if (NOT EVENT__DISABLE_OPENSSL)
    find_package(OpenSSL REQUIRED)

    set(EVENT__HAVE_OPENSSL 1)

    message(STATUS "OpenSSL include: ${OPENSSL_INCLUDE_DIR}")
    message(STATUS "OpenSSL lib: ${OPENSSL_LIBRARIES}")
.....

可以知道,調用find_package(OpenSSL REQUIRED)出現錯誤,再仔細看下這個條件下執行的都是關於openssl的代碼,既然沒有安裝openssl, 那么我們就將它跳過。
if 中的條件 NOT EVENT__DISABLE_OPENSSL, 當條件為 FALSE 就可以跳過了, 所以,只需要將 EVENT__DISABLE_OPENSSL 改為 ON即可。

修改EVENT__DISABLE_OPENSSL

全文搜索,從上到下找到EVENT__DISABLE_OPENSSL, 將其改為ON

代碼

option(EVENT__DISABLE_OPENSSL
    "Define if libevent should build without support for OpenSSL encryption" ON)

回到cmake

回到cmake,將cache清空,重新配置, 並config

configure結果

關於

modern cmake 已經愛不釋手了

依賴openssl

依賴openssl

依賴openssl

下載地址

  • 這里 可以下載 已經編譯好的 openssl的安裝包(EXE+MSI),包括32和64位
  • 下載太慢? 我把它下載好,存放在這里,解決下載慢。
  • 注意,它雖然編譯好了,但是有 系統要求的,如下:
  • openssl版本:v1.1.1
  • 它有light和非light區分,全部下載好,自行選擇,從這里校對 HASH
  • 先安裝openssl,再配置系統環境變量系統環境變量,系統環境變量
  • libevent version: 2.1.10-stable
  • cmake version: 3.18
  • win os version: 20H2
  • 本文將介紹一種依賴openssl編譯libevent的方法

openssl 安裝注意

一定要記住openssl安裝后的目錄,比如: C:\soft\install\openssl, 待會兒配置環境變量需要這個目錄

配置環境變量

上文可知,缺少openssl后,cmake提示缺少系統環境變量

CMake Error at C:/xxxxx/cmake-3.18/Modules/FindPackageHandleStandardArgs.cmake:165 (message):
  Could NOT find OpenSSL, try to set the path to OpenSSL root folder in the
  system variable OPENSSL_ROOT_DIR (missing: OPENSSL_CRYPTO_LIBRARY
  OPENSSL_INCLUDE_DIR)

OPENSSL_ROOT_DIROPENSSL_CRYPTO_LIBRARYOPENSSL_INCLUDE_DIR 都是缺少的。那我們就加上。

name value
OPENSSL_ROOT_DIR C:\soft\install\openssl
OPENSSL_CRYPTO_LIBRARY C:\soft\install\openssl\lib
OPENSSL_INCLUDE_DIR C:\soft\install\openssl\include

我的環境變量配置

敲黑板,配置完環境變量,一定要重啟PC

敲黑板,配置完環境變量,一定要重啟PC

敲黑板,配置完環境變量,一定要重啟PC

配置cmake

1.CMakeLists.txt配置

解壓libevent的源碼后,如果參考不依賴openssl,將EVENT__DISABLE_OPENSSL改為ON, 那么現在需要你改為OFF,恢復為默認。

2.cmake gui配置生成

選擇合適的版本(32?64?)和編譯器, configure.

3.附 cmake生成的解決方案


免責聲明!

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



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