2

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)
4

1 に答える 1

4

[この質問は、 Unix & Linux SEに移すと便利です。]

完全に互換性のないパッケージがインストールされているか、 1 つ以上のパッケージが正しくインストールされていない、インストール手順に手順が抜けている、ダイナミック リンカーのデフォルトが期待どおりではありません。

libperlは (当然のことながら) の一部ですperl。一部のプラットフォームでは、通常の perl デフォルト ビルドでは静的ライブラリのみが作成されますが、代わりにlibperl.a動的ライブラリを作成することも、両方を作成することもできます。libperl.soこのアプローチを好む人.soもいますが、パフォーマンスのオーバーヘッドが発生する可能性があります。

問題の最も可能性の高い原因は次のとおりです。

  1. インストールperlには静的な libperl.a しかありませんが、動的なperlmod_perlに対して構築されました。libperl.so
  2. 動的リンカーが見えない場所にインストールされたperlパッケージlibperl.so

原因 1 に対処することは、互換性のあるさまざまなパッケージ (または組み合わせたパッケージ) を見つけることを意味します。

#2の場合は、libperl.so(のような場所)を見つけるか、 (新しいバイナリがインストールされた場所ならどこでも/usr/local/lib/perl5/5.8.9/mach/CORE/)実行して、それがどこにあるかを確認できるはずです。ldd /usr/local/bin/perlperl

以下に提案されている変更を試す前にldconfig、ルートとして実行してから、問題が修正される場合に備えて再試行してください。

新しい perl インストール ディレクトリの下にある場合はlibperl.so、そのファイルを Apachelib/サブディレクトリにコピーしRPATHて、そのディレクトリをライブラリ検索パスに含めるように (ELF を使用して) Apache をビルドする必要があります。その下/usr/local/libにある場合は、デフォルトのリンカー構成 ( /etc/ld.so.conf) を変更してそのディレクトリを含め、更新 (ldconfigルートとして実行) する必要があります。

あなたのプラットフォームは明らかに Linux ですが、パッケージの種類とソース、またはソース ビルドであるかどうかについては言及していないため、これ以上正確なことは言えません...

Apache モジュールの従来の場所は、直接ServerRootmodules/ではなく、サブディレクトリ内にあるため、何かが適切にインストールされていないのではないかと少し疑っています。

于 2013-02-28T19:03:39.490 に答える