2012-01-01 8 views
4

実行時に(つまりLoadLibrary()またはdlopen()を使用して)dll/soファイルを読み込むと、C++ atexit()関数の動作はどうなりますか?アプリケーションが終了する前にライブラリをアンロードすると呼び出されますか?そして、すべてのプラットフォームで同じ動作が期待できますか? (具体的には、ウィンドウズとユニックスのようなシステム)実行時にロードされるdll/atexのatexit()の振る舞いは何ですか?

答えて

4

Windowsの場合:FreeLibraryを呼び出すと、各DLLに対してatexit関数チェーンが実行されます。 dllが不特定の順序でアンロードされるので、他のdllのグローバルに依存するハンドラを追加しないでください。

ここにいくつかの情報リンクがあります。http://msdn.microsoft.com/en-us/library/988ye33t.aspx