加载mod_perl.so时出错

时间:2013-02-26 09:08:15

标签: perl apache2 mod-perl2

我安装了perl-5.8.9,mod_perl-2.0.7,Embperl-2.3.0和httpd-2.2.22。在启动apache时,我得到如下错误(为了便于阅读,分为多行):

httpd: Syntax error on line * of ../conf/httpd.conf:
   Cannot load ../Apache2/mod_perl.so into server:
      libperl.so: cannot open shared object file:
         No such file or directory

通过ldd ../Apache2/mod_perl.so,我得到了像

这样的输出
    linux-gate.so.1 =>  (0x00735000)
    libperl.so => not found
    libnsl.so.1 => /lib/libnsl.so.1 (0x005e5000)
    libdl.so.2 => /lib/libdl.so.2 (0x00fab000)
    libm.so.6 => /lib/libm.so.6 (0x0041f000)
    libcrypt.so.1 => /lib/libcrypt.so.1 (0x0084d000)
    libutil.so.1 => /lib/libutil.so.1 (0x00110000)
    libc.so.6 => /lib/libc.so.6 (0x00197000)
    /lib/ld-linux.so.2 (0x00163000)

1 个答案:

答案 0 :(得分:3)

[这个问题可以有效地转移到 Unix& Linux SE。]

您似乎安装了不太兼容的软件包,一个或多个软件包未正确安装,安装说明缺少步骤动态链接器默认值不太正确。

libperl(不出所料)是perl的一部分。在许多平台上,普通的perl默认构建只会创建libperl.a静态库,但也可以创建动态库libperl.so。有些人赞成使用.so方法,但可能会有一些性能开销。

问题的最可能原因是:

  1. perl是静态的,mod_perl是针对带有libperl.so动态 perl构建的
  2. perl软件包安装libperl.so某处动态链接器看起来不是
  3. 原因#1意味着找到不同的兼容软件包(或者可能是组合软件包)。

    如果它是#2,您应该能够找到libperl.so(某个地方,如/usr/local/lib/perl5/5.8.9/mach/CORE/),或者只运行ldd /usr/local/bin/perl(安装新perl二进制文件的地方)看它是否知道它在哪里。

    在您尝试下面建议的任何更改之前,只需以root用户身份运行ldconfig,然后重试,以便修复它。

    如果在新的perl安装目录下找到libperl.so,则可以将该文件复制到Apache lib/子目录,因为应该构建Apache(RPATH选项)以添加该目录到库搜索路径。如果您在/usr/local/lib下找到它,则应修改默认链接器配置(/etc/ld.so.conf)以添加该目录,并刷新(ldconfig)。

    您的平台显然是Linux,但您没有说明软件包的类型和来源,或者它是否是源代码构建,所以我不能更精确......

    我有点怀疑某些东西没有正确安装,因为Apache模块的常规位置在modules/子目录内,而不是直接在 ServerRoot 中。