本质是configure未在标准路径找到头文件和库文件;需装对应开发包(如libpcre3-dev)、非标路径用--with-pcre-include/--with-pcre-lib等显式指定,检查软链接有效性,并配置LD_LIBRARY_PATH或ld.so.conf确保运行时加载。

编译 Nginx 源码时提示“PCRE library not found”“zlib library not found”或“OpenSSL library not found”,本质不是库没装,而是 configure 脚本在标准路径下没找到头文件(如 pcre.h、zlib.h、openssl/ssl.h)和对应库文件(如 libpcre.so、libz.so、libssl.so)。关键要分清是系统缺开发包、路径不标准,还是软链接断裂。
先确认是否装了正确的开发包(不是运行库)
只装 libpcre3 或 pcre 不行,必须装带头文件和静态/动态库的开发包:
-
Ubuntu/Debian:运行
sudo apt install libpcre3-dev zlib1g-dev libssl-dev -
CentOS/RHEL/Rocky/AlmaLinux:运行
sudo yum install pcre-devel zlib-devel openssl-devel(RHEL 9+ 用pcre2-devel) - 验证是否生效:
ls /usr/include/pcre.h、ls /usr/lib64/libpcre.so*、pkg-config --modversion zlib
路径不在默认位置?手动指定 include 和 lib 目录
如果库装在 /opt/pcre、/usr/local/openssl 这类非标路径,configure 默认找不到,需显式告诉它:
- PCRE:
--with-pcre-include=/opt/pcre/include --with-pcre-lib=/opt/pcre/lib - zlib:
--with-zlib-include=/usr/local/zlib/include --with-zlib-lib=/usr/local/zlib/lib - OpenSSL:
--with-openssl-include=/usr/local/openssl/include --with-openssl-lib=/usr/local/openssl/lib - 注意:
--with-pcre=PATH是用于自带 PCRE 源码编译,不是指向已安装的二进制库
检查软链接是否真实有效
若参数里用了软链接路径(如 --with-pcre=/opt/pcre),而 /opt/pcre 是个软链,就得层层追到底:
- 查软链指向:
readlink -f /opt/pcre,看输出是否为一个真实存在的目录 - 进该目录检查:
ls -l $(readlink -f /opt/pcre)/include/pcre.h、ls -l $(readlink -f /opt/pcre)/lib/libpcre.so - 确认权限:
stat -c "%a %n" $(readlink -f /opt/pcre),目录至少要有755(其他人可读可执行) - 常见断裂点:NFS 挂载未就绪、目标磁盘离线、SELinux 限制访问
确保运行时也能加载动态库
configure 成功 ≠ 启动成功。若启动时报 error while loading shared libraries: libpcre.so.3: cannot open shared object file,说明运行时找不到库:
- 临时解决:
export LD_LIBRARY_PATH="/opt/pcre/lib:/usr/local/zlib/lib:$LD_LIBRARY_PATH" - 永久生效:在
/etc/ld.so.conf.d/nginx-deps.conf中写入各 lib 路径,再运行sudo ldconfig - 验证:
ldd $(which nginx) | grep pcre,输出应显示具体路径且无not found


















