gpt4 book ai didi

c++ - cmake 在 Windows 上找不到 openssl

转载 作者:行者123 更新时间:2023-11-27 22:45:27 31 4
gpt4 key购买 nike

我已经阅读了这篇文章,但它没有回答我的问题:( cmake not able to find 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

升级到 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 header 中指定版本号的格式。这导致 CMake 在其 FindOpenSSL.cmake 模块中的版本解析代码失败,然后在 CMake 3.5.0 周围修复。此外,从 OpenSSL 1.1.0 开始,Windows 上的库名称更接近于 Unix 库名称,并命名为 libcrypto 和 libssl(可能带有更多后缀),而不是旧名称 libeay32 和 ssleay32。 CMake 3.7.0 包含针对此库名称更改的更新。由于这两项更改和修复,如果您想将 OpenSSL 1.1.0 或更高版本用于 CMake 项目,您可能应该使用 CMake 3.7.0 或更高版本。

关于c++ - cmake 在 Windows 上找不到 openssl,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43662998/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com