configure: error: mod_so has been requested but cannot be built on your system 解决办法

本文介绍了解决在OpenWRT环境下编译Apache时遇到的错误:configure:error:mod_sohasbeenrequestedbutcannotbebuiltonyoursystem。通过分析configure脚本,发现此错误源于libapr的编译选项中禁用了DSO支持。文中详细解释了如何调整libapr的编译配置以启用DSO支持,并最终成功编译Apache。

configure: error: mod_so has been requested but cannot be built on your system

openwrt 交叉编译 apache ,
configure 添加 --enable-so 选项后报错信息如下:

configure: error: mod_so has been requested but cannot be built on your system

原因分析 :
在编译目录查找打印上面错误的位置,grep “mod_so has been requested but cannot be built on your system” configure -n

httpd-2.4.28# grep "mod_so has been requested but cannot be built on your system" configure -n
13655:            as_fn_error $? "mod_so has been requested but cannot be built on your system" "$LINENO" 5

在 configure 文件的 第 13655 行:查看其上下文:

cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h.  */

#include <apr.h>
#if APR_HAS_DSO
YES_IS_DEFINED
#endif

_ACEOF
if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
  $EGREP "YES_IS_DEFINED" >/dev/null 2>&1; then :
  ac_cv_define_APR_HAS_DSO=yes
else
  ac_cv_define_APR_HAS_DSO=no
fi
rm -f conftest*

CPPFLAGS=$apr_old_cppflags


case "x$enable_so" in
    "xyes")
        if test $ac_cv_define_APR_HAS_DSO = "no"; then
            as_fn_error $? "mod_so has been requested but cannot be built on your system" "$LINENO" 5
        fi
        ;;

可知 configure 脚本检查了 APR_HAS_DSO 宏定义,没有定义APR_HAS_DSO 时就会报以上错误,
APR_HAS_DSO 位于 apr.h 中,来自 libapr 。

检查 libapr 的 编译选项: 位于 openwrt\feeds\packages\libs\apr\Makefile

 CONFIGURE_ARGS += \
        --with-devrandom=/dev/urandom \
        --disable-dso \
        $(call autoconf_bool,CONFIG_IPV6,ipv6)

openwrt 编译 libapr 时 开启了 --disable-dso 导致 APR_HAS_DSO 宏未定义

解决办法:
修改 openwrt\feeds\packages\libs\apr\Makefile , 把 --disable-dso 选项去掉

 CONFIGURE_ARGS += \
        --with-devrandom=/dev/urandom \       
        $(call autoconf_bool,CONFIG_IPV6,ipv6)

从新编译libapr 后再编译 apache

<think>我们遇到了一个配置错误:configure: error: gmp.h cannot be found or is unusable. 这个错误通常发生在编译需要GNU多精度算术库(GMP)的软件时,系统缺少GMP的开发文件(头文件和库)。 解决方法: 1. 安装GMP开发包: - 在Debian/Ubuntu系统上:`sudo apt-get install libgmp-dev` - 在RHEL/CentOS系统上:`sudo yum install gmp-devel` - 在Fedora系统上:`sudo dnf install gmp-devel` - 在Arch Linux上:`sudo pacman -S gmp` 2. 如果已经安装但路径不在标准位置,可以通过环境变量指定路径: ```bash export CPPFLAGS="-I/path/to/gmp/include" export LDFLAGS="-L/path/to/gmp/lib" ./configure ``` 3. 验证安装:确保头文件gmp.h在include路径中,库文件(如libgmp.so)在库路径中。 4. 如果是从源码安装GMP,确保已正确安装并添加到环境变量。 5. 如果问题仍然存在,检查config.log文件以获取更详细的错误信息。 §§相关问题§§1. 如何检查系统上是否已安装libgmp-dev或等效的开发包?2. 在非标准路径安装GMP后,如何永久设置环境变量以避免每次编译都要指定?3. 除了GMP库,还有哪些常见的库缺失会导致类似的configure错误?4. 在编译过程中遇到库版本不兼容的问题该如何解决?5. 如何在Windows系统上为C/C++编译环境安装GMP库?</think>这个错误 `configure: error: gmp.h cannot be found or is unusable` 表示在编译过程中缺少 GMP(GNU Multiple Precision Arithmetic Library)开发库。GMP 是一个高精度数学计算库,许多数学软件(如 Python 的 gmpy2、加密工具等)依赖它。 ### 解决方法: #### 1. **安装 GMP 开发包** - **Debian/Ubuntu**: ```bash sudo apt update && sudo apt install libgmp-dev ``` - **RHEL/CentOS**: ```bash sudo yum install gmp-devel ``` - **Fedora**: ```bash sudo dnf install gmp-devel ``` - **macOS (Homebrew)**: ```bash brew install gmp ``` #### 2. **验证安装** 安装后检查头文件是否存在: ```bash ls /usr/include/gmp.h # Linux ls /usr/local/include/gmp.h # macOS ``` #### 3. **指定自定义路径(如果手动安装)** 如果 GMP 安装在非标准路径(如 `/opt/gmp`),配置时需指定路径: ```bash ./configure CPPFLAGS="-I/opt/gmp/include" LDFLAGS="-L/opt/gmp/lib" ``` #### 4. **重新运行配置** 安装完成后重新执行: ```bash ./configure && make && sudo make install ``` ### 常见原因: - 未安装开发包(仅安装运行时库 `libgmp` 缺少头文件) - 32/64 位库冲突 - 自定义安装路径未加入环境变量
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值