私はストロベリー PERL をダウンロードし、Winxp sp3 で CGI Perl Apache を使用して 1 つのアプリケーションを作成しました)。私が使用している (他の誰かによって作成された) ライブラリの 1 つは、XML::LibXML を使用しています。ページをロードすると、Internal Server Error が表示されます。Apache エラー ログから、次のエラーが表示されます。
「C:/strawberry/perl/site/lib/auto/XML/LibXML/LibXML.dll」をモジュール XML::LibXML: load_file:The specified module could not C:/strawberry/perl/lib/DynaLoader.pm の 190 行
目に
あります。C:/strawberry/perl/site/lib/auto/XML/LibXML/LibXML.dll はすべてのパーミッションで存在します。また、このライブラリは Linux でも正しく動作します。LibXML を必要とするすべてのコードを削除しても、私のアプリケーションは問題なく動作します。
ここでいつ問題が発生する可能性があるか教えてください。
4 に答える
DynaLoader のソースを覗いてみると、
動的拡張機能の読み込みに関する問題の多くは、コードのこのセクションから発生しているように見えます: DynaLoader.pm の 123 行目で XYZ が失敗しました。多くの場合、これらのエラーは実際には拡張 XS ファイルの初期化 C コードで発生しています。Perl は、これが最後に実行された perl コードであるという理由だけで、この perl コードにあるとエラーを報告します。
より正確なエラー メッセージを提供する次のダイアログも表示されるはずです (気付いていないかもしれません)。
問題は、perl が LibXML.dll を見つけられないことではありません。それは、LibXML.dll が実際の libxml を見つけられないということです。(前者は、後者に Perl バインディングを提供する単なるラッパーです。) これを修正するには、Strawberry Perl のc\bin
フォルダーが PATH にあることを確認する必要があります。あなたの場合、それはC:\strawberry\c\bin
.
Windows で環境変数の設定を確認する必要がある場合があります。モジュールのインストール パスが PATH 変数に存在することを確認してください。Linuxで機能する理由は、通常、makeファイルがLinuxの環境変数をWindowsで設定するため、正しく設定されていない可能性があるためです。例えば; コントロール パネル\システムとセキュリティ\システムに移動し、設定の変更をクリックしてから、ユーザー変数セクションの詳細タブをクリックし、perl5lib という変数があるかどうかを確認します。そうでない場合は、新しい perl5lib 変数を作成し、ライブラリのパスを追加します (通常は C:\Perl\site\lib ですが、場合によっては異なる場合があります)。
Strawberry perl をインストールした後、同じ問題が発生しました。サーバーからスクリプトを実行すると正常に動作しましたが、自動化ツールからリモートで実行することはできませんでした。この問題は、リモートで実行したときに環境変数が更新されなかったことが原因でした。そのため、サーバーを再起動したところ、問題は解決しました。