3

mod_perl サイトを Linux ホスティングから FreeBSD に移動した後、ログファイルに次のエラーが記録されました。

ベンダは、../../lib/POSIX.pm (../../lib/auto/POSIX/SigRt/_init.al に自動分割) 993 行で使用される POSIX マクロ SIGRTMIN を定義していません\n

スクリプトは POSIX をインポートするだけで、いくつかの機能 (ceil など) を利用します。

この問題を解決するにはどうすればよいですか?

4

2 に答える 2

4

モジュールから少数の(またはまったく)ルーチンのみをインポートしてみてください。

use POSIX ();
my $n = POSIX::ceil(1.1);

これは同じ状況で私のために働いていました、私は理由がわかりません:)

于 2010-06-03T15:43:52.847 に答える
4

FreeBSD はほとんど POSIX に準拠しています。たとえば、その でandを定義していませんこれについては、 POSIX のドキュメントで警告されています。SIGRTMINSIGRTMAXsignal.h

さらに、悪意のあるベンダーの中には 1003.1 準拠を主張するものもありますが、実際にはそうではありません。PCTS (POSIX Compliance Test Suites) に合格しません。たとえば、あるベンダーが EDEADLK を定義していない場合や、open(2) によって設定される errno 値のセマンティクスが正しくない場合があります。Perl は POSIX 準拠を検証しようとしません。つまり、現在は「POSIX を使用する」とうまく言えますが、プログラムの後半で、ベンダーが手抜きであり、結局のところ使用可能な ICANON マクロがないことがわかります。これはバグであると解釈される可能性があります。

eugene yの解決策は、名前空間への自動エクスポートを防ぐため機能する可能性がありますが、呼び出しなどの前ceilPOSIX::.

于 2010-06-03T17:51:30.683 に答える