缺libxml2开发包导致php编译失败,需安装对应发行版的-dev或-devel包(如ubuntu用libxml2-dev,centos用libxml2-devel),并清理config.status等缓存后重新configure。

缺 libxml2 不是 PHP 本身的问题,而是编译时找不到它的头文件和库——你得装开发包,不是运行时的 lib 包。
为什么装了 libxml2 还报错?
Linux 发行版通常把运行时库(libxml2.so)和开发文件(libxml/tree.h、pkgconfig/libxml-2.0.pc 等)拆成两个包:
-
libxml2或libxml2-2:只含动态库,够运行用,但不够编译 -
libxml2-dev(Debian/Ubuntu)或libxml2-devel(RHEL/CentOS/Fedora):含头文件、pc 文件、静态库,PHPconfigure必须靠它找接口
怎么确认并安装对应 dev 包?
先查系统类型,再装对的包名,别硬套:
- Ubuntu/Debian:
sudo apt install libxml2-dev - CentOS/RHEL 7/8:
sudo yum install libxml2-devel(或dnf install libxml2-devel) - Alpine:
apk add libxml2-dev
装完验证:pkg-config --modversion libxml-2.0 应输出版本号;ls /usr/include/libxml2/libxml/tree.h 应存在。
立即学习“PHP免费学习笔记(深入)”;
重新编译 PHP 前要清理什么?
别直接 make,configure 缓存可能还记着旧状态:
- 进 PHP 源码目录,执行
make clean(如果之前编译过) - 删掉
./config.status和./config.log(避免 configure 跳过检测) - 重跑
./configure,确保输出里有checking for xml2-config... /usr/bin/xml2-config和checking for libxml-2.0 >= 2.9.0... yes - 再
make && sudo make install
最容易被忽略的是没清 configure 缓存——哪怕你已经装好 dev 包,./configure 仍可能沿用上次“没找到”的判断,直接跳过 libxml2 检查。务必删 config.status 再试。











