2009-04-15 12 views
2

HPプラットフォームでのみLD_PRELOADが強制され、他のUNIXフレーバでは実行されません(AIX、Linux、およびSolaris)。HP/UXでXML :: LibXML :: Commonを使用するために、libcl.2にLD_PRELOADを使用する必要があるのはなぜですか?

すべてのUnixフレーバにPerlモジュールXML::LibXML::Commonをビルドしました.HPプラットフォーム上でlibcl.2ライブラリ用のLD_PRELOADを特に実行しなければなりませんでした。他のUnixプラットフォームでは、何もそのようなものは必要ありませんでした。

これはOSの動作か、HPローダー/コンパイラには本当に欠けていますか?

は、私は単に "::のlibxml :: SAX XML"

use XML::LibXML::SAX; 
$x = XML::LibXML::SAX->new(); 

の新しいオブジェクトを作成し、perlスクリプトを実行していたし、それが

のために訴え

読み込むことができません「site_perl/5.8.8/PA-RISC2.0モジュール用のスレッドマルチ/自動/ XML/LibXML/Common/Common.sl 'XML :: LibXML :: Common:Execフォーマットエラー

libcl.2のLD_PRELOADはエラーになります。 Perlはマルチスレッド対応のために構築されています。

答えて

1

あなたの質問は明確ではありません...なぜLD_PRELOADを使用する必要がありましたか?

HP-UXはLD_LIBRARY_PATHの代わりにSHLIB_PATHを使用しているので、間違った環境変数を設定していますか?

他のプラットフォームでも同様の綴りがあります.SolarisとLinuxは、まったく同じenvのセットを共有します。ヴァルス。 MacOS XはDYLIB_LIBRARY_PATHを使用します。 AIXはLIBPATHを使用しています。

+0

はいHPではLD_PRELOADを実行しなければなりませんでした。 私は、LIBPATHSを使ってライブラリをどこで見つけるかについて環境について語っているわけではありません(OSごとに同義語が異なると思います)。私は、ライブラリを特別にロードしなければならないということを意味していました。変数。 私は意味をなさないことを願っています。 – kadeshpa

+0

なぜライブラリをロードしなければなりませんでしたか?別のライブラリのシンボルを上書きしたのですか?置き換える必要があるlibcl.slはありますか?現時点では、LD_PRELOADを実行する前に何がうまくいかなかったか説明していません。だから私は混乱している。他の答えの欠如は、他の答えがないことも示唆しています。 –

2

私はあなたがなぜそれを使用しなければならないと思っていると思います。 Perlを実行している場合、呼び出し元のライブラリのうちの1つがlibcより前にロードされており、おそらくシングルスレッドである可能性があります。依存関係処理の一環として、自分の環境にマルチスレッドライブラリをロードしようとしています。 LD_PRELOADを使用することで、ライブラリ介在の原則を使用して、安全でないライブラリをロードする前にそのライブラリを強制的にロードすると思います。介在の概念は複雑なものであり、あなたは以下のlinkからいくつかの利益を得るかもしれません:

抜粋:

ライブラリ介在を使用するには、特殊な共有ライブラリと セットを作成する が必要LD_PRELOAD環境 変数。 LD_PRELOADが設定されている場合、 が共有ライブラリを検索するときに、 ダイナミックリンカは指定された ライブラリを使用します。

0

これは関連性があるかどうかはわかりませんが、おそらくそうです。 HP-UXに同梱されているPerlは標準のPerlではありませんが、ActiveState Perlのコピーです。他のすべての環境とは異なり、HP-UXでPerlが不思議な動作をしている場合は、ActiveState Perlに問題がないかどうかを確認してください。

0

これは古いテーマですが、私は今HP-UXで同様のことをしています。 私の場合は、Perlではありませんが、Pythonのsqlite3バインディングを構築中に、/usr/lib/libcl.2の動的ロードが失敗しています。

configureスクリプトを--with-libs = '-lcl'で実行しました。バイナリにリンクし、LD_PRELOADを使用することは同じではありませんが、両方とも/usr/lib/libcl.2がロードされたときに変更されます。 それは私の解決したので、それを試してみてください。

関連する問題