You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Windows下使用CMake无法编译链接OpenSSL的问题求助

Windows下CMake无法识别Choco安装的OpenSSL的解决方案

问题情况

  • 通过管理员终端用Choco安装OpenSSL:choco install openssl -y,安装路径为C:\Program Files\OpenSSL-Win64
  • CMakeLists.txt配置:find_package(OpenSSL REQUIRED)
  • 报错信息:

    Could NOT find OpenSSL, try to set the path to OpenSSL root folder in the
    system variable OPENSSL_ROOT_DIR (missing: OPENSSL_CRYPTO_LIBRARY) (found
    version "3.2.1")

  • 已尝试操作:删除CMake缓存、将OPENSSL_ROOT_DIR加入PATH、重启终端确认变量,使用版本为CMake 3.28.3 + OpenSSL 3.2.1
  • 额外情况:GitHub Actions的windows-latest runner默认安装的OpenSSL可被识别,但手动安装Curl并配置变量后同样无法识别;Ubuntu下安装libcurl4-gnutls-dev libssl-dev可正常编译,上周Windows runner也能正常工作

解决步骤

1. 运行CMake时手动指定路径参数

直接在CMake命令中传入OpenSSL的根目录及库文件路径,覆盖默认查找规则:

cmake .. -G "Visual Studio 17 2022" -A x64 ^
-DOPENSSL_ROOT_DIR="C:\Program Files\OpenSSL-Win64" ^
-DOPENSSL_CRYPTO_LIBRARY="C:\Program Files\OpenSSL-Win64\lib\libcrypto-3-x64.lib" ^
-DOPENSSL_SSL_LIBRARY="C:\Program Files\OpenSSL-Win64\lib\libssl-3-x64.lib"

注:如果使用MinGW编译,替换库文件为libcrypto.a/libssl.a,对应路径下的静态库文件

2. 修改CMakeLists.txt提前配置路径

在find_package(OpenSSL REQUIRED)前添加手动路径配置,确保CMake能精准定位:

set(OPENSSL_ROOT_DIR "C:/Program Files/OpenSSL-Win64")
set(OPENSSL_INCLUDE_DIR "${OPENSSL_ROOT_DIR}/include")
set(OPENSSL_CRYPTO_LIBRARY "${OPENSSL_ROOT_DIR}/lib/libcrypto-3-x64.lib")
set(OPENSSL_SSL_LIBRARY "${OPENSSL_ROOT_DIR}/lib/libssl-3-x64.lib")

find_package(OpenSSL REQUIRED)

3. 核对OpenSSL库文件完整性

确认C:\Program Files\OpenSSL-Win64\lib目录下存在对应版本的库文件:

  • 动态导入库:libcrypto-3-x64.lib、libssl-3-x64.lib
  • 静态库:libcrypto.lib、libssl.lib
    如果库文件名与上述不符,需同步修改CMake参数或配置中的文件名

4. GitHub Actions Windows Runner适配

在Workflow中安装OpenSSL后直接指定CMake参数,避免依赖自动查找:

- name: Install OpenSSL
  run: choco install openssl -y
- name: Configure CMake
  run: |
    cmake .. -G "Visual Studio 17 2022" -A x64 `
    -DOPENSSL_ROOT_DIR="C:\Program Files\OpenSSL-Win64" `
    -DOPENSSL_CRYPTO_LIBRARY="C:\Program Files\OpenSSL-Win64\lib\libcrypto-3-x64.lib"

核心原因

CMake自带的FindOpenSSL.cmake在Windows下默认优先匹配系统或VS集成的OpenSSL版本,Choco安装的版本因库文件名带版本后缀(如libcrypto-3-x64.lib),无法被默认规则匹配,需手动指定精确路径。

内容的提问来源于stack exchange,提问作者Stéphane Janel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 23:47:41