c++ - Cmake 的 FindOpenSSL 的行为在 3.12 和 3.19 之间发生了变化——我似乎无法告诉 Cmake 我希望它在哪里找到 OpenSSL [Windows]
问题描述
在 CMake 3.12 中,FindOpenSSL() 为相关项目定位了我本地构建的 openSSL 版本。在 CMake 3.19 中,FindOpenSSL() 生成一个搜索列表,用于查找我的本地构建版本的 openSSL 以及安装在我的系统上但我不希望它使用的版本。
CMake 文档在其“提示”部分中说要设置“将 OPENSSL_ROOT_DIR 设置为 OpenSSL 安装的根目录”。
我尝试了两种不同的机制:
-DOPENSSL_ROOT_DIR=$ENV{MY_OPEN_SSL_BUILD}
在我的 CmakeLists.txt
IF (WIN32)
set(OPENSSL_ROOT_DIR $ENV{MY_OPEN_SSL_BUILD})
ENDIF (WIN32)
两者仍然有 FindOpenSSL() 创建一个搜索路径,其中包括安装在我的系统上的 openSSL,但不是我构建的那个。虽然我建立的那个是在搜索路径中。
是否存在强制 FindOpenSSL() 选择我想要的特定的构造?
@Tsyvarev 我做了一些编辑(我本来应该这么说的,我是过失)。
-DOPENSSL_ROOT_DIR=c:/wrk/builds/release/lib
但是 -D 选项或我的 CMakeLists.txt 中的显式设置仍然让我得到以下信息:
在 3.12 中——我得到以下 cmake 输出:
-- Found OpenSSL: C:/wrk/builds/release/lib/libeay32.lib (found version "1.0.2x")
在 3.19 中——我得到以下 cmake 输出:
-- Found OpenSSL: optimized;C:/wrk/builds/release/lib/libeay32.lib;debug;C:/Program Files/OpenSSL-Win64/lib/VC/libcrypto64MDd.lib (found version "1.0.2y")
链接时问题就出现了。该错误之所以起作用,ASN1_STRING_get0_data
是因为在libcrypto64MDd.lib
我的系统上安装了以下内容:
-- Looking for ASN1_STRING_get0_data in optimized;C:/wrk/builds/develop-VS2019/lib/libeay32.lib;debug;C:/Program Files/OpenSSL-Win64/lib/VC/libcrypto64MDd.lib - found
在我最终链接的 OpenSSL 构建中,没有它。
我希望这可以澄清。
解决方案
推荐阅读
- operating-system - 如何拥有多个鼠标光标或模拟多个鼠标但不在同一台计算机上移动我的光标?
- javascript - 文件上传功能正在本地主机上运行,但我无法在在线服务器上上传文件
- c# - 如何在 C# .Net WEB API 中以 JSON 形式返回 SQL 表
- mysql - 选择两列不等于 0 的计数
- macos - vulkan 管道布局兼容性
- asp.net - 如何避免视图中的重复值
- react-native - 如何处理 inputBox 以 scrollheight 的 keyboardAwareScrollView 为焦点
- python - python DataFrame(numpy)中的内存问题
- regex - 如何在蜂巢表中搜索日文字符串?
- javascript - 谁能解释 getBoundingClientRect() 的奇怪对象行为?