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

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对该版本支持更完善:

  1. 安装对应开发包:
sudo apt update
sudo apt install libssl1.1 libssl-dev
  1. 重新执行编译脚本,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版本检测:

  1. 打开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()
  1. 保存后重新运行编译脚本。

验证

重新执行编译流程后,若CMake日志中显示正确的OPENSSL_MAJOR_VERSION、OPENSSL_MINOR_VERSION数值,说明问题已解决。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 08:40:22