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

Windows10下用CMake ExternalProject安装OpenSSL3.0.5失败:config.com不兼容

Windows10下用CMake ExternalProject安装OpenSSL3.0.5失败的解决办法

问题描述

在Ubuntu、Android平台通过CMake的ExternalProject安装OpenSSL3.0.5都正常,但到Windows10 64位环境执行时直接报错:

Performing configure step for 'openssl_external'
This version of D:\17-6-2022\main\src\external\openssl\config.com is not compatible with the version of Windows you're running. Check your computer's system information and then contact the software publisher.

本质问题是:Windows10 64位不支持运行16位的config.com程序,而且你原脚本直接套用了Unix平台的config配置脚本和make构建命令——OpenSSL在Windows平台有专门的配置、构建逻辑,不能直接照搬Unix的那套。

解决步骤

1. 核心修正点

  • Windows下不能直接跑Unix风格的config脚本,要根据使用的编译器(MSVC/MinGW)选择对应配置命令
  • 构建命令不能用make:MSVC环境用nmake,MinGW环境用mingw32-make
  • Windows下配置OpenSSL必须先安装Perl,否则无法生成构建所需的文件

2. 修改后的CMake脚本

直接替换你原有的代码,这个脚本会自动识别平台和编译器,适配不同环境:

set(OPENSSL_INSTALL_DIR ${CMAKE_BINARY_DIR}/install)
set(OPENSSL_INCLUDE_DIR ${OPENSSL_INSTALL_DIR}/include)
set(OPENSSL_LIB_DIR ${OPENSSL_INSTALL_DIR}/lib)
set(OPENSSL_DATA_DIR ${OPENSSL_INCLUDE_DIR}/openssl-data)

# 按平台适配OpenSSL的配置和构建命令
if(WIN32)
    # 先查找Perl,Windows下配置OpenSSL必须依赖它
    find_program(PERL_EXECUTABLE perl REQUIRED)
    
    if(MSVC)
        # MSVC 64位环境用VC-WIN64A,32位环境替换为VC-WIN32即可
        set(OPENSSL_CONFIGURE_COMMAND ${PERL_EXECUTABLE} ${CMAKE_CURRENT_LIST_DIR}/Configure VC-WIN64A)
        set(OPENSSL_BUILD_COMMAND nmake)
        set(OPENSSL_INSTALL_COMMAND nmake install)
    else()
        # MinGW 64位环境用mingw64,32位环境替换为mingw即可
        set(OPENSSL_CONFIGURE_COMMAND ${CMAKE_CURRENT_LIST_DIR}/config mingw64)
        set(OPENSSL_BUILD_COMMAND mingw32-make)
        set(OPENSSL_INSTALL_COMMAND mingw32-make install)
    endif()
    
    # 统一整理配置参数
    list(APPEND OPENSSL_CONFIGURE_ARGS --prefix=${OPENSSL_INSTALL_DIR} --openssldir=${OPENSSL_DATA_DIR} --libdir=${OPENSSL_LIB_DIR} no-shared)
else()
    # Unix类平台保留原有配置逻辑
    set(OPENSSL_CONFIGURE_COMMAND ${CMAKE_CURRENT_LIST_DIR}/config)
    set(OPENSSL_BUILD_COMMAND make)
    set(OPENSSL_INSTALL_COMMAND make install)
    list(APPEND OPENSSL_CONFIGURE_ARGS --prefix=${OPENSSL_INSTALL_DIR} --openssldir=${OPENSSL_DATA_DIR} --libdir=${OPENSSL_LIB_DIR} no-shared)
endif()

ExternalProject_Add(
    openssl_external
    PREFIX openssl
    SOURCE_DIR "${CMAKE_CURRENT_LIST_DIR}"
    CONFIGURE_COMMAND ${OPENSSL_CONFIGURE_COMMAND} ${OPENSSL_CONFIGURE_ARGS}
    BUILD_COMMAND ${OPENSSL_BUILD_COMMAND}
    TEST_COMMAND ""
    INSTALL_COMMAND ${OPENSSL_INSTALL_COMMAND}
    INSTALL_DIR ${OPENSSL_INSTALL_DIR}
    BUILD_IN_SOURCE 0
)

3. 额外注意事项

  • 先安装Perl:推荐Strawberry Perl或ActivePerl,安装时务必勾选将Perl添加到系统PATH
  • MSVC环境下:需要用Visual Studio自带的命令提示符启动CMake,或者提前配置好MSVC的环境变量,否则会找不到nmake命令
  • MinGW环境下:确保MinGW的bin目录已加入系统PATH,且版本与目标架构匹配(64位环境对应mingw64)

内容的提问来源于stack exchange,提问作者Mouli Shankar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 01:31:04