4つの共有ライブラリを持つ実行可能ファイルがあり、依存関係ツリーは次のようになります。実行可能アプリはとのdlopenを実行foo.soしbar.soます。foo.so次に、へのリンクfooHelper.soとへのbar.soリンクbarHelper.so。
さて、問題はそれfooHelper.soでありbarHelper.so、同じシンボルのいくつかを持っています。funcたとえば、とにさまざまな実装があるとしfooHelper.soましょうbarHelper.so。の実装を強制的foo.soに使用し、を使用する方法はありますか?現在起こっていることは、ヘルパーのリンクの順序に応じて、の実装の1つだけがとの両方で使用されるということです。これは、デフォルトのUnixリンケージモデルが原因です。シンボルの定義がすでにロードされている場合、後でロードされる共有ライブラリからの他の定義はすべて破棄されます。基本的に、fooHelper.sobar.sobarHelper.sofuncfoo.sobar.sofunc最初にリンクされたヘルパーライブラリから取得されます。共有ライブラリのソースコードを変更せずに、適切なマッピングを明示的に指定する方法が必要です。
私はg++4.4でLinuxに取り組んでいます。