根本原因是 pkg-config 找不到 OpenSSL 的 openssl.pc 文件,需确认其存在并精确设置 PKG_CONFIG_PATH 指向对应 lib/pkgconfig 目录,同时清理 configure 缓存(如 rm config.cache)后重试。

为什么 configure 报错 “No package 'openssl' found”
根本原因是 pkg-config 找不到 OpenSSL 的 .pc 文件(比如 openssl.pc),不是 OpenSSL 没装,而是它的元数据路径没被 pkg-config 扫描到。常见于:Homebrew 安装的 openssl@1.1 默认不把 pkgconfig 目录加入系统搜索路径;或者手动编译安装 OpenSSL 到 /opt/openssl-1.1.1 后忘了导出 PKG_CONFIG_PATH。
确认 openssl.pc 是否存在并定位路径
先别急着改环境变量,先验证文件是否存在:
- 运行
find /usr -name "openssl.pc" 2>/dev/null或find /opt -name "openssl.pc" 2>/dev/null - Homebrew 用户大概率在:
/usr/local/Cellar/openssl@1.1/1.1.1w/lib/pkgconfig/openssl.pc(版本号可能为1.1.1q、1.1.1t等) - 源码编译用户通常在:
/opt/openssl-1.1.1/lib/pkgconfig/openssl.pc - 如果找不到,说明 OpenSSL 1.1.x 未正确安装或未启用
--enable-shared编译选项
正确设置 PKG_CONFIG_PATH 和 OPENSSL_* 变量
只设 PKG_CONFIG_PATH 就够了,OPENSSL_CFLAGS/OPENSSL_LIBS 是 fallback 方案,优先走 pkg-config 流程更可靠:
- 将
openssl.pc所在目录(即lib/pkgconfig)加入PKG_CONFIG_PATH,例如:export PKG_CONFIG_PATH="/usr/local/Cellar/openssl@1.1/1.1.1w/lib/pkgconfig:$PKG_CONFIG_PATH" - 确保
pkg-config --modversion openssl能输出1.1.1w这类版本号,而不是报错 - 如果仍失败,再补上显式变量(仅作兜底):
export OPENSSL_CFLAGS="-I/usr/local/Cellar/openssl@1.1/1.1.1w/include"export OPENSSL_LIBS="-L/usr/local/Cellar/openssl@1.1/1.1.1w/lib -lssl -lcrypto" - Mac 上还要注意:
libssl.dylib的 runtime path 可能不对,可临时用install_name_tool修复,但更推荐从头用--prefix一致的路径编译
configure 前必须 clean 并避免缓存干扰
PHP 的 configure 脚本会缓存 pkg-config 结果,改了环境变量后不清理就重跑,很可能还是读旧结果:
立即学习“PHP免费学习笔记(深入)”;
- 进 PHP 源码目录后,先执行:
make distclean或至少rm config.cache - 再重新运行
./configure,不要复用之前失败的config.log - 验证是否生效:查看
config.log中是否有checking for OpenSSL support... yes和pkg-config --exists openssl成功行 - 若用
phpbrew,记得加-j清理:phpbrew clean 7.4.25,否则它会复用旧构建目录
关键点在于:OpenSSL 1.1.x 必须真实存在且带完整 pkgconfig 元数据,PKG_CONFIG_PATH 必须精确指向那个 lib/pkgconfig 目录,且 configure 不能读缓存。三者缺一不可。



















