2015-01-14 12 views
6

私の実行ファイルがライブラリをロードするのにdlopenを呼び出しても、dlcloseを呼び出すことを怠ると、ライブラリはプロセスが終了するまでロードされたままで、OSはそれを強制的にアンロードします。dlopenされたライブラリからdlopen()が呼び出された場合、ロード・リークはありますか?

私はb.soをロードa.soをロードする場合は、a.sodlcloseを呼び出し、OSは、同様にb.soをアンロードしますか?

これは、Microsoftと同等の方法であるLoadLibraryExを使用して同様のシナリオとどのように比較されますか?

答えて

3

アプリケーションでは、アプリケーションのロードについて心配する必要があります。a.soをロードする場合は、a.soをアンロードすることに関心を持つ必要があります。

a.sob.soのアンロードを拒否した場合、これはa.soの問題です。あなたのアプリは責任を負いません。 a.soの作者は、彼らの行為を一緒にして、ライブラリの問題を解決する必要があります。

+0

ありがとうございました。 'dl *'のドキュメントでこの情報がどこにあるのか知っていますか?私はhttp://linux.die.net/man/3/dlopenを読んでいたが見つからなかった – Kietz

+0

私は主にLinuxプログラミングではなく、Linux/Unixであるが、正式に文書化する必要はないと思う。すべてのモジュールが行うことができるのは、ライブラリをロードすること自体に責任があります。ライブラリがサードパーティのもので、第三者がいくつかの設定、実行環境などに基づいて第三者が1,2,3、またはモジュールをロードしない場合はどうでしょうか?あなたのアプリケーションは、内部モジュールとは何ですか?もちろん違います。 – PaulMcKenzie

+0

これは間違いなく 'LoadLibrary *'と 'GetModuleHandle *'に当てはまりますか?それらの文書を私に指摘できますか? – Kietz