【发布时间】:2017-09-25 13:21:38
【问题描述】:
我已经阅读了这篇文章,但它没有回答我的问题:(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 以及您使用的是什么版本的 CMake?较新的 OpenSSL 版本更改了如何在其标头中指定版本号的格式,并且需要在 CMake 中进行相应的更改来解决这一问题。也许尝试最新的 CMake 版本(当前为 3.8.0),看看是否能解决您的问题。如果是的话,我会把这个评论变成你的答案。
-
@CraigScott 它帮助很大,但并没有完全解决问题。请参阅我更新的问题。
-
@CraigScott 现在我设法解决了这个问题。我在 library 上混合了案例。请将您的评论转为回答,我会接受。