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
相关产品推荐
相关产品推荐

