2012-01-01 157 views
4

如果我在運行時加載dll/so文件(即使用LoadLibrary()dlopen()),那麼C++ atexit()函數的行爲是什麼?如果在應用程序退出之前卸載庫,它會被調用嗎?我能期待所有平臺上的相同行爲嗎? (具體來說,windows和unix-like系統)atexit()在運行時加載的dll /中的行爲是什麼?

回答

4

在windows下:當你調用FreeLibrary的時候,每個dll都會執行atexit函數鏈。需要注意的是,dll以未指定的順序卸載,因此不要添加依賴於某些其他dll的全局變量的atexit處理程序。

以下是一些更多信息鏈接:http://msdn.microsoft.com/en-us/library/988ye33t.aspx