在 Fedora 8 系统上编译安装 Apache 时,我原以为这是一个常规流程,结果却在编译环节遇到一个常见但令人困惑的问题。本文将详细记录整个解决过程,希望能为遇到类似情况的朋友提供参考。
先从官网下载源码包:
>tar -zxvf httpd-2.2.8.tar.gz >cd httpd-2.2.8 >./configure --prefix=/usr/local/httpd >make
结果 make 的时候直接报错,弹出一段 libtool 相关的错误信息:
libtool: link: `passwd/apr_getpass.lo' is not a valid libtool object make[3]: *** [libapr-1.la] 错误 1 make[3]: Lea ving directory `/root/httpd-2.2.8/srclib/apr' make[2]: *** [all-recursive] 错误 1 make[2]: Lea ving directory `/root/httpd-2.2.8/srclib/apr' make[1]: *** [all-recursive] 错误 1 make[1]: Lea ving directory `/root/httpd-2.2.8/srclib' make: *** [all-recursive] 错误 1
坦白说,我在其他 Linux 发行版上编译 Apache 时很少遇到这种问题。经过排查,发现根源在于系统自带的 apr 和 apr-util 版本不匹配或未完整安装。Apache 2.2.8 编译时依赖这两个库,而 Fedora 8 的默认环境并未提供完整支持,若直接使用源码包中 srclib 目录下的内容进行编译,就会触发此类链接错误。
解决办法其实很简单 —— 手动下载并编译 apr 和 apr-util。前往 Apache 官网 https://apr.apache.org/ 下载最新版本的 apr-1.2.12.tar.gz 和 apr-util-1.2.12.tar.gz,然后分别安装:
>tar -zxvf apr-1.2.12-tar.gz >cd apr-1.2.12 >./configure --prefix=/usr/local/apr-httpd/ >make && make install
接着编译 apr-util,需要指定刚才安装的 apr 路径:
>tar -zxvf apr-util-1.2.12-tar.gz >cd apr-util-1.2.12 >./configure --prefix=/usr/local/apr-util-httpd/ --with-apr=/usr/local/apr-httpd/ >make && make install
完成这两个依赖后,再返回 Apache 的编译目录,重新配置并指定 apr 和 apr-util 的位置:
>./configure --prefix=/usr/local/httpd/ --with-apr=/usr/local/apr-httpd/ --with-apr-util=/usr/local/apr-util-httpd/ >make >make install
这一次编译顺利通过,未出现任何错误提示。安装完成后,Apache 服务便可正常启动。问题本身并不复杂,关键在于及时识别依赖缺失,并手动指定正确的路径。如果你也在类似的老旧系统上编译新版本软件,建议事先检查系统环境是否完备,否则这类 libtool 错误可能会让人措手不及。
