Ubuntu22.04编译Apache httpd2.2.3 configure/make报错咨询
Apache httpd 2.2.3 编译报错解决方案
问题1:configure阶段提示缺失config.guess、config.sub
- 报错复现操作与信息
$ git clone -b 2.2.3 --single-branch https://github.com/apache/httpd.git $ cd httpd $ autoconf $ ./configure configure: error: cannot find required auxiliary files: config.guess config.sub
- 运行环境
$ cat /etc/os-release PRETTY_NAME="Ubuntu 22.04 LTS" NAME="Ubuntu" VERSION_ID="22.04" VERSION="22.04 (Jammy Jellyfish)" VERSION_CODENAME=jammy ID=ubuntu ID_LIKE=debian HOME_URL="https://www.ubuntu.com/" SUPPORT_URL="https://help.ubuntu.com/" BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/" PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-conditions/privacy-policy" UBUNTU_CODENAME=jammy $ autoconf -V autoconf (GNU Autoconf) 2.71
- 原因:Git仓库托管的是开发态源码,未携带正式发行版打包时附带的GNU构建辅助脚本,本地执行高版本autoconf生成配置脚本时不会自动补全这两个文件,最终导致配置检测失败。
- 解决方法:放弃使用Git拉取的开发分支源码,直接下载对应版本的正式发行源码包,发行包内已预置所有必要的构建脚本,无需手动执行autoconf生成配置文件。
问题2:make阶段提示crypt符号未定义、DSO缺失
- 报错复现操作与信息
$ wget https://archive.apache.org/dist/httpd/httpd-2.2.3.tar.gz $ gzip -d httpd-2.2.3.tar.gz $ tar xvf httpd-2.2.3.tar $ cd httpd-2.2.3 $ ./configure --prefix /home/ubuntu/local $ make /usr/bin/ld: .libs/htpasswd.o: undefined reference to symbol 'crypt@@XCRYPT_2.0' /usr/bin/ld: /lib/x86_64-linux-gnu/libcrypt.so.1: error adding symbols: DSO missing from command line collect2: error: ld returned 1 exit status make[2]: *** [Makefile:39: htpasswd] Error 1 make[2]: Leaving directory '/home/ubuntu/httpd-2.2.3/support' make[1]: *** [/home/ubuntu/httpd-2.2.3/build/rules.mk:72: all-recursive] Error 1 make[1]: Leaving directory '/home/ubuntu/httpd-2.2.3/support' make: *** [/home/ubuntu/httpd-2.2.3/build/rules.mk:72: all-recursive] Error 1
- 已安装依赖
sudo apt-get install libapr1-dev libaprutil1-dev sudo apt-get install build-essential sudo apt-get install libpcre3-dev
- 原因:Ubuntu 22.04将原属于glibc的crypt密码加密函数拆分到独立的libcrypt共享库中,httpd 2.2.3发布时间较早,自带构建脚本默认未将
-lcrypt加入链接参数,链接htpasswd等工具时找不到对应函数实现就会触发报错。另外configure执行时--prefix参数后缺少等号,属于参数写法不规范,可能引发路径识别异常。 - 解决步骤:
- 先清理之前编译生成的缓存文件,避免旧配置干扰:
make clean- 重新执行configure,显式指定crypt库为链接依赖,同时修正prefix参数写法:
注意:
--prefix参数后必须紧跟等号再写安装路径,否则参数无法被正确识别./configure --prefix=/home/ubuntu/local LDFLAGS="-lcrypt"- 重新执行编译即可:
编译完成后执行makemake install就能将httpd安装到指定的/home/ubuntu/local路径下。
内容的提问来源于stack exchange,提问作者zono
相关产品推荐
相关产品推荐

