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-latestrunner默认安装的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
相关产品推荐
相关产品推荐

