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。
有关更多信息,请阅读findopenssl.cmake文件作为cmake Distribution的一部分。
更多最新的OpenSSL版本(我认为是1.1.x系列(稍微更改了opensslv.h
标头中如何指定版本号的格式。这导致CMAKE在其FindOpenSSL.cmake
模块中的版本解析代码失败,然后在CMAKE 3.5.0周围修复了该代码。此外,从OpenSL 1.1.0来看,Windows上的库名称更靠近其Unix对应物,并被命名为libcrypto和libssl(可能带有其他后缀(,而不是旧名称libeay32和ssleay32。CMAKE 3.7.0包含更新以说明此库名称更改。由于这两个更改和修复的结果,如果要使用CMAKE项目使用OpenSSL 1.1.0或更高版本,则可能应该使用CMAKE 3.7.0或更高版本。
我们在cmake 2.8.12.2和openssl 1.0.2U
方面也有类似的问题CMake Error at /usr/share/cmake/Modules/FindOpenSSL.cmake:278 (list):
list GET given empty list
Call Stack (most recent call first):
CMakeLists.txt:169 (FIND_PACKAGE)
要查找更多详细信息,您可以添加&quot- debug-ofput"cmake命令的选项。
在我们的情况下,它有助于在cmake命令行上指定-d_openssl_version:
OPENSSL_VER=1.0.2u
cmake ...
-DOPENSSL_ROOT_DIR=$IDIR_BASE
-DOPENSSL_INCLUDE_DIR=$IDIR_BASE/include
-D_OPENSSL_VERSION="$OPENSSL_VER"
- std::map<struct,struct>::find 找不到匹配项,但是如果我循环通过 begin() 到 end(),我在那里看到匹配项
- 找不到成员对象:没有名为get_event()的成员,也处理多态性和向量
- 为什么野牛仍在使用"int yylex(void)",却找不到"int yylex(YYS
- C++ Windows 驱动程序MSB3030无法复制该文件,因为它找不到
- 奇怪的(对我来说)返回声明 - 在谷歌上找不到任何关于它的信息
- 找不到QtResource文件中的文件
- VC++本机单元测试,找不到调试符号
- RegGetValue在当前用户下找不到名称
- 带有 -stdlib=libc++ 的 clang++ 9.0.1 找不到<optional>
- c++找不到具有相同哈希的无序集合元素
- 找不到以下加速库:boost_fiber
- 找不到 FLTK(缺少:FLTK_INCLUDE_DIR)
- 设置 Visual Studio for MPI: 找不到标识符错误
- "assimp/config.h"找不到,但它在文件夹中
- 链接器找不到在虚拟类 c++ 中访问的静态字段的符号
- C++系统找不到指定的文件错误
- find_package(OpenSSL)找不到特定的libssl版本
- Cmake找不到"openssl" "libcrypto" pkg_search_module
- 在 vscode 上找不到'openssl/crypto.h'文件
- Cmake在Windows上找不到OpenSSL