2013-02-22 2 views
7

私は、間違ったライブラリバージョン(GenericV2.soなど)を使用する代わりに、間違ったライブラリバージョン(GenericV1.soなど)を使用してサードパーティライブラリ(TP.soなど)の問題を抱えています。私のプログラムで使用するために余分なライブラリが含まれています。RTLD_DEEPBINDをサポートしていないプラットフォームのdlopen()関数に、RTLD_DEEPBINDフラグの代替手段がありますか?

これを直接的に解決するには、RTLD_DEEPBINDフラグを指定してdlopen()を使用します。しかし、フラグはLinuxのみで有効です。HP-UX、Solaris、AIXなどの他のプラットフォームではありません。

Linux以外のプラットフォームで使用する代替手段はありますか?あなたの応答のための

おかげで

+3

RTLD_DEEPBINDをPOSIX互換の方法で置き換えるにはどうすればよいと思いますか?その結果、プラットフォームに依存しない問題の実装が行われます。 –

答えて

0

あなたが本当にすべてでRTLD_DEEPBINDを必要としないように私には思えます。競合するシンボルを含むライブラリが正しい順序でロードされていることを確認する必要があります。

いくつかのアイデア:

  1. あなたは右のライブラリー(GenericV2.so)は、他のライブラリの前にロードされていることを確認するためにLD_PRELOADを使用することができます。

  2. 正しい順序でライブラリをdlopensする関数を作ることができます:GenericV2.soとTP.so。

  3. GenericV1.soがロードされないことを確認できますか?この図書館から何かが必要ですか?

関連する問題