簡體   English   中英

cmake在Windows上找不到OpenSSL

[英]cmake can not find openssl on windows

我已經閱讀了這篇文章,但沒有回答我的問題:( cmake無法找到openssl

我正在Windows 10 64位環境中工作,並且我想使用帶有ssl支持的boost asio,所以我在C:\\ Local \\ OpenSSL-Win64中安裝了openssl,並且有一個指向此的環境變量。

我在cmake中有以下代碼:

file(TO_CMAKE_PATH $ENV{OPENSSL_ROOT} OPENSSL_ROOT_DIR)
message(WARNING "root: ${OPENSSL_ROOT_DIR}")
find_package(OpenSSL )

message(WARNING "OpenSSL_VERSION: ${OPENSSL_VERSION}")
message(WARNING "OpenSSL_INCLUDE_DIR: ${OPENSSL_INCLUDE_DIR}")
message(WARNING "OpenSSL_LIBRARIES: ${OPENSSL_LIBRARIES}")

當我運行cmake時,我收到以下消息:

CMake Warning at CMakeLists.txt:44 (message):
  root: C:/Local/OpenSSL-Win64


CMake Error at C:/Program Files (x86)/CMake/share/cmake-3.1/Modules/FindOpenSSL.cmake:293 (list):
  list GET given empty list
Call Stack (most recent call first):
  CMakeLists.txt:45 (find_package)


CMake Error at C:/Program Files (x86)/CMake/share/cmake-3.1/Modules/FindOpenSSL.cmake:294 (list):
  list GET given empty list
Call Stack (most recent call first):
  CMakeLists.txt:45 (find_package)


CMake Error at C:/Program Files (x86)/CMake/share/cmake-3.1/Modules/FindOpenSSL.cmake:296 (list):
  list GET given empty list
Call Stack (most recent call first):
  CMakeLists.txt:45 (find_package)


CMake Error at C:/Program Files (x86)/CMake/share/cmake-3.1/Modules/FindOpenSSL.cmake:298 (list):
  list GET given empty list
Call Stack (most recent call first):
  CMakeLists.txt:45 (find_package)


Could NOT find OpenSSL, try to set the path to OpenSSL root folder in the system variable OPENSSL_ROOT_DIR (missing:  OPENSSL_LIBRARIES) (found version ".0.0`")
CMake Warning at CMakeLists.txt:47 (message):
  OpenSSL_VERSION: .0.0`


CMake Warning at CMakeLists.txt:48 (message):
  OpenSSL_INCLUDE_DIR: C:/Local/OpenSSL-Win64/include


CMake Warning at CMakeLists.txt:49 (message):
  OpenSSL_LIBRARIES: SSL_EAY_LIBRARY-NOTFOUND;LIB_EAY_LIBRARY-NOTFOUND

可以看出,cmake可以找到正確指向C:/ Local / OpenSSL-Win64的環境變量

同樣有趣的是,它可以找到包含路徑:

CMake Warning at CMakeLists.txt:48 (message):
OpenSSL_INCLUDE_DIR: C:/Local/OpenSSL-Win64/include

但是版本和包含庫不正確。

有什么可以強制cmake查找openssl的特定方法嗎?

我如何確保它找到合適的靜態庫?

編輯1

Aftre升級到cmake 3.8,現在,cmake可以找到openssl,但找不到其庫。 輸出如下:

Found OpenSSL: C:/Local/OpenSSL-Win64/lib/libssl.lib (found version "1.1.0e") 
CMake Warning at CMakeLists.txt:52 (message):
  OpenSSL_VERSION: 1.1.0e


CMake Warning at CMakeLists.txt:53 (message):
  OpenSSL_INCLUDE_DIR: C:/Local/OpenSSL-Win64/include


CMake Warning at CMakeLists.txt:54 (message):
  OpenSSL_LIBRARIES:

為什么找不到庫?

編輯2

它找不到庫的原因是我將變量名使用了不同的大小寫。 正確的名稱是OPENSSL_LIBRARIES。

有關更多信息,請閱讀cmake發行版中的findopenssl.cmake文件。

最新的OpenSSL版本(我認為是1.1.x系列)稍微改變了在opensslv.h標頭中指定版本號的格式。 這導致CMake的FindOpenSSL.cmake模塊中的版本分析代碼失敗,然后圍繞CMake 3.5.0進行了修復。 此外,從OpenSSL 1.1.0開始,Windows上的庫名稱更接近於Unix上的庫名稱,並分別命名為libcrypto和libssl(可能帶有更多后綴),而不是舊名稱libeay32和ssleay32。 CMake 3.7.0包含此庫名稱更改的更新。 由於這兩個更改和修復,如果要對CMake項目使用OpenSSL 1.1.0或更高版本,則可能應該使用CMake 3.7.0或更高版本。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM