8

他のモジュールでは動作しませんが、例を示します。Text::CSV_XS を CPAN 設定でインストールしました:

'makepl_arg' => q[PREFIX=~/lib],

test.pl スクリプトを実行しようとすると:

$ perl test.pl

#!/usr/bin/perl

use lib "/homes/foobar/lib/lib64/perl5/site_perl/5.8.8/x86_64-linux-thread-multi";

use Text::CSV_XS;

print "test";

私は得る

モジュール Text::CSV_XS の '/homes/foobar/lib/lib64/perl5/site_perl/5.8.8/x86_64-linux-thread-multi/auto/Text/CSV_XS/CSV_XS.so' を読み込めません: /homes/ foob​​ar/lib/lib64/perl5/site_perl/5.8.8/x86_64-linux-thread-multi/auto/Text/CSV_XS/CSV_XS.so: 共有オブジェクト ファイルを開けません: /www/common/perl にそのようなファイルやディレクトリはありません/lib/5.8.2/i686-linux/DynaLoader.pm 229 行目。
test.pl 6 行目
test.pl の 6 行目でコンパイルが require で失敗しました。
BEGIN が失敗しました -- test.pl の 6 行目でコンパイルが中止されました。

DynaLoader.pm までエラーを追跡したところ、次の行で発生しました。

# Many dynamic extension loading problems will appear to come from
# this section of code: XYZ failed at line 123 of DynaLoader.pm.
# Often these errors are actually occurring in the initialisation
# C code of the extension XS file. Perl reports the error as being
# in this perl code simply because this was the last perl code
# it executed.

my $libref = dl_load_file($file, $module->dl_load_flags) or
    croak("Can't load '$file' for module $module: ".dl_error());

上記ディレクトリに CSV_XS.so が存在する

4

6 に答える 6

5

モジュールをインストールしたとき、出力を見ましたか? モジュールをインストールした場所はどこですか?libを見てください。期待する次のディレクトリが表示されますか?

~/lib を調べて、use libステートメントに正しいディレクトリ名があることを確認するために、すべてがどこにあるのかを確認します。

% find ~/lib -name CSV_XS.so

インストールされている場所を確認したら、そのディレクトリ名をuse lib(または PERL5LIB など) で使用します。

lib/libどういうわけかそこにあると思います。はPREFIX単なるプレフィックスであり、インストーラーは他のディレクトリ部分をそのベースパスに追加します。lib、man、binなどが含まれます。

于 2008-09-19T17:41:23.990 に答える
3

個人的には、local::libを使用することをお勧めします。:)

于 2009-01-23T01:28:44.040 に答える
2

代わりにこれを試してください:

'makepl_arg' => q[PREFIX=~/]

PREFIX は、インストールするすべてのディレクトリ (bin、lib など) のベースを設定します。

また、'~' でシェル展開の問題が発生している可能性もあります。自分で拡張してみることができます:

'makepl_arg' => q[PREFIX=/home/users/foobar]

また、質問しているエラーを取得するために使用したコマンドを含めていただけると助かります。

于 2008-09-19T15:39:48.730 に答える
1

エラー メッセージ ("at /www/common ...") から、スクリプトが CGI または mod_perl スクリプトであることがわかります。Web サーバーは、モジュールをインストールしたホーム ディレクトリの下にあるユーザー 'foo' として実行されていない可能性があります。これにより、Web サーバーがそのディレクトリを読み取ることができなくなる可能性があります。

また、「 chroot jail 」で実行されている可能性もあります。つまり、モジュールをインストールしたディレクトリがスクリプトから見えない可能性があります。

つまり、モジュールが表示されたからといっ、Web サーバー、つまりスクリプトが表示できるとは限りません。関連するファイルのアクセス許可を確認し、サーバーが chroot されている場合は、モジュール ディレクトリが仮想ファイル システム内にマウントされているかどうかを確認する必要があります。

于 2008-11-07T23:17:33.287 に答える
0

問題のファイル(CSV_XS.so)は存在しますか?

記載されている場所にありますか?

もし、するなら:

set |grep PERL

出力は何ですか?

他のローカルperlモジュールを正常にインストールしましたか?

于 2008-09-19T16:32:46.450 に答える
0

スペースがあれば、自分のホームディレクトリに自分のperlをインストールすることを強くお勧めします。次に、すべてを管理下に置き、独自のモジュールセットを維持し、管理者が古いバージョンのperlを使用している場合はエスケープすることができます。(彼らがいつかアップグレードして、あなたが依存しているすべてのモジュールを除外した場合、あなた自身を維持することは言うまでもありません。)

于 2008-09-19T20:41:08.147 に答える