根本原因是CentOS 7默认libzip版本(0.10.1)过低且无.pc文件,需彻底卸载旧包(含devel),安装≥0.11且非1.3.1/1.7.0的版本(如1.5.2),并正确配置PKG_CONFIG_PATH和ld.so.conf。

PHP 7.4 编译时提示 No package 'libzip' 或 libzip >= 0.11 不满足,根本原因是系统自带的 libzip(如 CentOS 7 默认的 0.10.1)太旧,且 RPM 包不提供 .pc 文件,pkg-config 根本查不到它。
卸载系统自带的 libzip 和 libzip-devel
必须彻底清掉旧包,否则新版本安装后仍可能被旧路径干扰:
- 运行
rpm -qa | grep libzip确认已安装哪些包(常见有libzip-0.10.1-9.el7.x86_64、libzip-devel-0.10.1-9.el7.x86_64) - 执行
yum remove libzip libzip-devel—— 注意不要漏掉devel子包,否则头文件缺失,PHP configure 会直接失败 - 再跑一次
rpm -qa | grep libzip,输出应为空
下载并编译安装兼容版本的 libzip
PHP 7.4 对 libzip 版本有明确限制:必须 ≥ 0.11,但**不能是 1.3.1 或 1.7.0**(这两个版本存在 ABI 兼容问题,会导致 PHP 启动时报 undefined symbol: zip_source_filep 类错误)。
- 推荐使用
libzip-1.5.2或libzip-1.9.2(截至 2026 年 4 月,这两个版本经实测稳定) - 下载解压:
wget https://libzip.org/download/libzip-1.5.2.tar.gz && tar -zxvf libzip-1.5.2.tar.gz && cd libzip-1.5.2 - 用
cmake构建(注意:configure 脚本已废弃,新版只支持 cmake):mkdir build && cd build && cmake -DCMAKE_INSTALL_PREFIX=/usr/local .. && make && sudo make install - 安装后检查:
ls /usr/local/lib/pkgconfig/libzip.pc必须存在,这是 PHP configure 找到它的唯一依据
设置 PKG_CONFIG_PATH 并刷新动态库缓存
pkg-config 默认只查系统路径(/usr/lib64/pkgconfig),你装在 /usr/local 下必须显式告知:
立即学习“PHP免费学习笔记(深入)”;
- 临时生效(仅当前 shell):
export PKG_CONFIG_PATH="/usr/local/lib/pkgconfig" - 永久生效(推荐):写入
/etc/profile.d/libzip.sh,内容为export PKG_CONFIG_PATH="/usr/local/lib/pkgconfig",然后source /etc/profile.d/libzip.sh - 同时别忘了让动态链接器知道新库位置:
echo "/usr/local/lib" > /etc/ld.so.conf.d/libzip.conf && ldconfig - 验证是否就位:
pkg-config --modversion libzip应输出1.5.2;pkg-config --cflags libzip应返回包含-I/usr/local/include的字符串
PHP configure 时仍报错的典型原因
即使 libzip 装对了,PHP configure 还可能失败,常见卡点如下:
-
configure: error: Package requirements (libzip >= 0.11) were not met:大概率是PKG_CONFIG_PATH没生效,或libzip.pc权限不对(确保是 644,非 root 用户也能读) -
checking for libzip... not found:PHP configure 脚本可能缓存了旧结果,加--disable-rpath或删掉config.cache再试 - 后续
make报undefined reference to zip_*:说明链接时没找到libzip.so,确认ldconfig -p | grep zip有输出,且/usr/local/lib已在缓存中 - 编译成功但 PHP 启动时报
libzip.so.5: cannot open shared object file:运行时找不到 so,检查LD_LIBRARY_PATH或确认/etc/ld.so.conf.d/libzip.conf已加载
最关键的不是“装没装”,而是 pkg-config 能不能定位到 .pc 文件、动态链接器能不能在运行时解析到符号 —— 这两点漏任何一个,都会在不同阶段崩给你看。



















