编译apache2.4报错
2018-9-9
apache2.4和2.2版本在centos上编译时依赖的apr、apr-util不同。yum中的包有点老,所以只能下载1.6版本的源码编译。
下载httpd-2.4.34、apr-1.6.3、apr-util-1.6.1,解压后按照正常编译三步骤分别安装apr、apr-util、httpd。编译apr-util时依赖apr,编译httpd时依赖apr、apr-util,所以注意顺序。
但是在编译httpd第一步时就报错:
...
/usr/local/apr-util/lib/libaprutil-1.so: undefined reference to `XML_StopParser'
/usr/local/apr-util/lib/libaprutil-1.so: undefined reference to `XML_Parse'
/usr/local/apr-util/lib/libaprutil-1.so: undefined reference to `XML_ErrorString'
/usr/local/apr-util/lib/libaprutil-1.so: undefined reference to `XML_SetElementHandler'
collect2: error: ld returned 1 exit status
make[2]: *** [htpasswd] 错误 1
make[2]: 离开目录“/usr/local/src/httpd-2.4.28/support”
make[1]: *** [all-recursive] 错误 1
make[1]: 离开目录“/usr/local/src/httpd-2.4.28/support”
make: *** [all-recursive] 错误 1
网上查到两种方法,请教大牛得到一种方法,现在分别记录下来。注意,这是三种解决方案,不要一起用、混用。
安装apr、apr-util的1.5版本
这个方法试过,可行。去apr官方网站apr,从旧版本里找到1.5版本的两个包。再细分的版本应该不用管,大版本号对就行。然后下载,在centos删除1.6版本后重新编译1.5版本。然后就可以顺利编译httpd了。
重新编译apr-util
报错提示缺少了xml相关的库,需要安装libxml2-devel包。直接安装并不能解决问题,因为httpd调用的apr-util已经安装好了,但是apr-util并没有libxml2-devel包支持。所以重新编译apr-util:
[root@localhost ~]# yum install -y libxml2-devel # 安装libxml2-devel包
[root@localhost ~]# rm -rf /usr/local/apr-util
[root@localhost ~]# cd /usr/local/src/apr-util-1.6.1 # 这一步很重要,必须清除之前配置时的缓存
[root@localhost apr-util-1.6.1]# make clean # 源码安装三步走
[root@localhost apr-util-1.6.1]# ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr
[root@localhost apr-util-1.6.1]# make
[root@localhost apr-util-1.6.1]# make install
重新编译apr-util:
# 同样要清理之前的缓存十分重要
[root@localhost src]# cd /usr/local/src/httpd-2.4.34
[root@localhost httpd-2.4.34]# make clean
[root@localhost httpd-2.4.34]# ./configure --prefix=/usr/local/apache2.4 --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util --enable-so --enable-mods-shared=most
[root@localhost httpd-2.4.34]# make # 这时make没报错了
[root@localhost httpd-2.4.34]# make install
直接编译httpd
下载三个源码包,解压后将apr和apr-util的解压包移动到httpd/srclib目录下,并改名apr、apr-util:
[root@localhost src]# mv apr-1.6.3 httpd-2.4.34/srclib/apr
[root@localhost src]# mv apr-util-1.6.1 httpd-2.4.34/srclib/apr-util
然后直接编译httpd,参数加上--with-include-apr
:
[root@localhost src]# cd httpd-2.4.34
[root@localhost httpd-2.4.34]# ./configure --prefix=/usr/local/apache2.4 --enable-so --enable-mods-shared=most --with-included-apr #不加这参数找不到apr-util
然后就可以make&&make install
。亲测可行,确实解决apr、apr-util依赖问题。至于其他包缺失,按照提示安装。
复盘:apr和apr-util都安装最新的1.6反倒编译不了apache2.4,从解决的途径来看,应该是新版apr安装时的bug。可能在安装是调整apr、apr-util对libxml的参数,也会解决这个问题。由于现在研究还浅,以后有时间再深入学习试验。