升级Apache httpd至2.4.46后启动报错:undefined symbol问题求助
解决Apache httpd 2.4.46启动报错:undefined symbol: apr_procattr_perms_set_register
这事儿其实很好判断——就是APR(Apache Portable Runtime)版本不兼容闹的!你把httpd升级到了2.4.46,但系统里配套的APR库还是原来2.4.6版本的旧东西,新的httpd二进制文件要调用一个叫apr_procattr_perms_set_register的符号,可旧APR里根本没有这个玩意儿,自然启动失败了。
下面给你一步步解决的办法:
1. 先查清楚当前系统的APR版本
先确认下你现在用的APR到底是啥版本,执行这俩命令看看:
apr-1-config --version apu-1-config --version
httpd 2.4.46要求APR至少是1.6.5,APR-util至少是1.6.1,要是你的版本比这低,那问题肯定出在这儿。
2. 升级APR和APR-util
办法一:用包管理器直接升级(有合适源的话优先选这个)
如果是RHEL/CentOS系的系统,先确保EPEL源开了,然后直接升级:
yum update apr apr-util
Debian/Ubuntu系的话就用这个:
apt-get update && apt-get install --only-upgrade apr apr-util
办法二:手动编译安装(包管理器没合适版本时用)
要是包管理器里找不到符合要求的版本,那就自己编译:
- 先搞APR(选1.6.5以上的版本,比如1.7.0就和2.4.46兼容):
wget https://downloads.apache.org/apr/apr-1.7.0.tar.gz tar zxf apr-1.7.0.tar.gz cd apr-1.7.0 ./configure --prefix=/usr/local/apr make && make install - 再搞APR-util(对应1.6.1以上版本):
wget https://downloads.apache.org/apr/apr-util-1.6.1.tar.gz tar zxf apr-util-1.6.1.tar.gz cd apr-util-1.6.1 ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr make && make install - 最后重新编译httpd,指定新的APR路径:
cd httpd-2.4.46 ./configure --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util [这里加上你之前编译httpd用的其他参数] make && make install
3. 验证库依赖是否正确
升级完之后,得确认httpd确实用上了新的APR库,执行这个命令:
ldd /usr/sbin/httpd | grep apr
看输出里的apr和apr-util路径是不是你刚安装的新路径,别还是旧的。
4. 重新启动httpd
最后再试一次启动:
systemctl start httpd
要是还有问题,就去看系统日志找线索:
journalctl -u httpd -xe
内容的提问来源于stack exchange,提问作者Kiran Satpute
相关产品推荐
相关产品推荐

