首页 > 解决方案 > 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 构建中,没有它。

我希望这可以澄清。

标签: c++cmakeopenssl

解决方案


推荐阅读