1

rlTD_NOLOADでdlopenを使用すると、共有オブジェクトがすでにロードされているかどうかを確認できることを知っています。ただし、これが実行可能ファイルにリンクされていて、アプリケーションの起動時にリンカによってロードされた場合、これは機能しないようです。

つまり、mylib.soがあり、それをdlopenでロードするとします。後で、RLTD_NOLOADを使用してdlopenを作成すると、期待どおりにハンドルが取得されます。

ただし、mylib.soをアプリケーション(makefileの-lmylib)にリンクすると、dlopenはNULLを返します。

共有オブジェクトがexecに直接リンクされている場合、どうすれば共有オブジェクトへのハンドルを取得できますか。明示的にロードされていませんか?

前もって感謝します

4

1 に答える 1

1

これは遅すぎますが-

dlopen(NULL, RTLD_LAZY/*Any load option u want*/)バイナリへのハンドルを取得します。また、ロードしたバイナリライブラリまたは共有ライブラリで任意のシンボルを見つけることができるはずです。そこから始めるのが良いと思います。

于 2010-10-14T09:00:37.577 に答える