Ubuntu 22.04编译程序时提示找不到合适的OpenSSL求助
解决Ubuntu 22.04编译MySQL 8.0.27时OpenSSL检测失败的问题
问题分析
从编译日志可见,CMake已定位到OpenSSL的头文件路径(/usr/include)和库文件(/usr/lib/x86_64-linux-gnu/libssl.so、libcrypto.so),但无法读取OPENSSL_MAJOR_VERSION等版本信息,进而判定找不到兼容的SSL库。核心原因是Ubuntu 22.04默认预装OpenSSL 3.x,而MySQL 8.0.27的CMake检测脚本对OpenSSL 3.x的版本识别存在兼容缺陷。
解决方案
方案1:安装OpenSSL 1.1.x开发包(推荐)
Ubuntu 22.04仓库仍提供OpenSSL 1.1.x包,MySQL 8.0.27对该版本支持更完善:
- 安装对应开发包:
sudo apt update sudo apt install libssl1.1 libssl-dev
- 重新执行编译脚本,CMake会自动识别兼容版本。
方案2:手动指定OpenSSL路径(自定义安装场景)
若你自行编译安装了OpenSSL,需在CMake命令中手动指定路径:
cmake -DWITH_SSL=/path/to/your/openssl/installation ..
将/path/to/your/openssl/installation替换为实际安装目录(如/usr/local/openssl-1.1.1)。
方案3:修改CMake SSL检测脚本(进阶操作)
若不想更换OpenSSL版本,可修改MySQL源码中的cmake/ssl.cmake脚本,适配OpenSSL 3.x版本检测:
- 打开
cmake/ssl.cmake,找到版本检测代码段,替换为以下逻辑:
if(EXISTS "${OPENSSL_INCLUDE_DIR}/openssl/opensslv.h") file(STRINGS "${OPENSSL_INCLUDE_DIR}/openssl/opensslv.h" openssl_version_str REGEX "^#define[\t ]+OPENSSL_VERSION_NUMBER[\t ]+0x[0-9a-fA-F]+.*") string(REGEX REPLACE "^#define[\t ]+OPENSSL_VERSION_NUMBER[\t ]+0x([0-9a-fA-F]+).*" "\\1" openssl_version_hex "${openssl_version_str}") math(EXPR OPENSSL_MAJOR_VERSION "${openssl_version_hex} >> 24") math(EXPR OPENSSL_MINOR_VERSION "(${openssl_version_hex} >> 16) & 0xFF") math(EXPR OPENSSL_FIX_VERSION "(${openssl_version_hex} >> 8) & 0xFF") endif()
- 保存后重新运行编译脚本。
验证
重新执行编译流程后,若CMake日志中显示正确的OPENSSL_MAJOR_VERSION、OPENSSL_MINOR_VERSION数值,说明问题已解决。
内容的提问来源于stack exchange,提问作者sama
相关产品推荐
相关产品推荐

