Windows10下Cygwin非标准安装OpenSSL致CMake无法识别的解决问询
Cygwin64下CMake识别OpenSSL路径的解决方法
问题场景
在Cygwin64环境中使用CMake执行以下命令查找OpenSSL:
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 "1.1.1d")
CMake默认期望OpenSSL的文件集中在单一根目录下,比如:
/usr/local/openssl/bin /usr/local/openssl/include /usr/local/openssl/lib
但Cygwin的OpenSSL实际路径布局为:
/usr/local/bin/ /usr/local/lib/ /usr/local/include/openssl
这种路径结构差异导致CMake无法正确识别OpenSSL。
解决方法
方法1:手动指定核心变量
在调用find_package前,直接设置OpenSSL的头文件目录和加密库路径,适配Cygwin的布局:
# 指定头文件父目录(openssl头文件实际在/usr/local/include/openssl下) set(OPENSSL_INCLUDE_DIR "/usr/local/include") # 根据实际安装的库类型调整:静态库为libcrypto.a,动态库可能是libcrypto.dll.a或libcrypto.so set(OPENSSL_CRYPTO_LIBRARY "/usr/local/lib/libcrypto.a") find_package(OpenSSL REQUIRED)
方法2:设置根目录并补充路径
设置OPENSSL_ROOT_DIR为Cygwin的/usr/local,同时明确头文件位置,引导CMake正确查找:
set(OPENSSL_ROOT_DIR "/usr/local") set(OPENSSL_INCLUDE_DIR "${OPENSSL_ROOT_DIR}/include") find_package(OpenSSL REQUIRED)
方法3:通过环境变量传递(命令行场景)
在执行CMake前,先设置环境变量,让CMake读取这些参数:
export OPENSSL_ROOT_DIR=/usr/local export OPENSSL_INCLUDE_DIR=/usr/local/include # 执行CMake配置 cmake ..
前置检查
确保已通过Cygwin安装器或apt-cyg工具安装了OpenSSL开发包openssl-devel,否则即使路径配置正确,也会缺失必要的头文件和库文件。
内容的提问来源于stack exchange,提问作者Dennis Heimbigner
相关产品推荐
相关产品推荐

