源码安装apache时apr相关错误的根本原因是apache 2.4+强制依赖外部新版apr及apr-util,必须严格按序编译安装:先./configure --prefix=/usr/local/apr && make && make install apr,再./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr && make && make install apr-util,最后apache configure中显式指定--with-apr和--with-apr-util路径,并补充expat-devel、libxml2-devel等系统依赖。

源码安装 Apache 时,APR 和 APR-util 报错是最常见的编译障碍,根本原因在于 Apache 2.4+ 版本强制要求外部、较新版本的 APR 及其配套库,而系统自带的或旧版依赖无法满足。关键不是跳过,而是按顺序、带依赖地重新构建这三者。
必须先装好 APR 和 APR-util
Apache 不再捆绑 APR,所以不能直接 ./configure 就跑。你得先单独编译安装 APR 和 APR-util,且顺序不能颠倒:
- 先下载并解压 apr-x.x.x.tar.gz(推荐 1.6.x 系列),进入目录执行:
./configure --prefix=/usr/local/apr && make && make install - 再下载对应版本的 apr-util-x.x.x.tar.gz(如 apr-util-1.6.1),解压后进入目录,**必须指定 APR 路径**:
./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr && make && make install
常见报错及对应修复
编译过程中出现错误,基本都指向缺失底层依赖或版本不匹配:
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
-
“APR not found” 或 configure 失败:说明没装 APR,或路径写错。确认
/usr/local/apr/bin/apr-1-config存在,且 Apache 的 configure 中用--with-apr=/usr/local/apr(不是 bin 目录) -
“expat.h: No such file or directory”:缺 XML 解析支持,运行
yum install -y expat-devel(CentOS/RHEL)或apt install libexpat1-dev(Ubuntu/Debian) -
undefined reference to `XML_Parse` / `XML_StopParser`:这是 APR-util 编译时没链接到 XML 库。解决方法是:
① 先装yum install -y libxml2-devel;
② 彻底删除已安装的 APR-util 目录(rm -rf /usr/local/apr-util);
③ 进入源码目录执行make clean,再重新 configure + make + install
Apache configure 参数要带全路径
装完 APR 和 APR-util 后,Apache 的 configure 命令不能省略关键参数:
--with-apr=/usr/local/apr--with-apr-util=/usr/local/apr-util- 如果还报 PCRE 错误,同样需源码安装 pcre(如 pcre-8.41),然后加
--with-pcre=/usr/local/pcre - 完整示例:
./configure --prefix=/usr/local/apache --enable-so --enable-mods-shared=most --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util --with-pcre=/usr/local/pcre
编译前记得清理和验证
很多失败源于缓存残留或环境不洁:
- 每次重试前,在 Apache 源码目录运行
make clean;若之前 configure 过,建议也删掉整个config.status和Makefile,或直接解压新源码包 - 确认 GCC、C++ 编译器已就位:
yum groupinstall "Development Tools"或yum install -y gcc gcc-c++ - 编译完成后用
echo $?检查返回值,0 表示成功;安装后可运行/usr/local/apache/bin/httpd -v验证版本










