2011-11-07 56 views

回答

2

從手冊頁:

dlclose()

功能dlclose()遞減的動態庫句柄句柄引用計數。如果引用計數下降到零,並且沒有其他加載的庫使用它中的符號,則動態庫將被卸載。
函數dlclose()在成功時返回0,在錯誤時返回非零值。

因此引用計數是自動完成的,但是這個調用是最後一個並且不卸載庫的事實沒有被指示。如果你需要的話,你需要數一數。

或者你可以dlopenRTLD_NOLOADdlclose

不要加載庫。這可以用來測試庫是否已經駐留(dlopen()如果不是,則返回NULL,如果庫駐留則返回庫)。

(請注意,你需要再次dlclose()它,如果你有一個參考,這是活潑的,所以一定要確保所有潛在的操作發生在一個單一的線或序列化。)

你可能對RTLD_NODELETE選項感興趣:

不要在dlclose()期間卸載庫。因此,如果稍後用dlopen()重新加載庫,則庫的靜態變量爲 不會重新初始化。該標誌不是POSIX.1-2001中規定的 。

0

通過檢查文件/proc/self/maps,可以檢查庫是否已從進程地址空間取消映射。

恐怕這可能是相當linux特定的,但它應該工作。

相關問題