如果在此論壇中重複此問題,我很抱歉。我有一個問題,在Mac上加載和卸載dylibs不能按預期工作(尤其是卸載部分)。 問題是如果我有一個可執行文件,並且如果我加載共享庫說A.dylib,然後使用加載的共享庫加載庫說B.dylib。當我嘗試在稍後階段卸載庫B.dylib時,沒有返回錯誤代碼(返回int值爲0--因爲我使用常規的dlopen和dlclose函數來裝載和卸載庫,0表示卸載成功) ,但是當我檢查確保使用活動監視器或lsof時,b.dylib仍在內存中。在Mac OSX中加載和卸載共享庫
現在我們正在將此代碼移植到windows,linux & mac。 Windows和Linux按預期工作,但只有Mac給我帶來問題。
我正在閱讀mac開發者庫,發現:「有幾種情況下動態庫永遠不會被卸載: 1)主要的可執行鏈接違背它,2)一個API不是supoort卸載(例如NSAddImage()) 用於加載它或其他依賴它的動態庫,3)動態庫在 dyld的共享緩存中。「
在我的情況下,我不會跌倒前兩種情況之一。我懷疑case3。
這是我的問題: 1.我能做些什麼來確保我有案例3? 2.如果是,如何解決? 3.如果沒有,如何解決它? 4.爲什麼mac如此不同?
在這方面的任何幫助表示讚賞!
感謝, 揚
不錯的一個。 gotcha ...感謝您的幫助 – jan