如果这个问题以前在这个论坛上被重复过,我很抱歉。我有一个问题,dylibs 的加载和卸载在 Mac 中没有按预期工作(尤其是卸载部分。)。问题是我是否有一个可执行文件,如果我加载一个共享库,比如 A.dylib,然后使用加载的共享库来加载一个库,比如 B.dylib。当我稍后尝试卸载库 B.dylib 时,没有返回错误代码(返回 int 值为 0 - 因为我使用常规 dlopen 和 dlclose 函数来加载和卸载库,0 表示卸载成功) ,但是当我检查以确保使用活动监视器或 lsof 时,b.dylib 仍在内存中。
现在我们正在为 windows、linux 和 mac 移植这段代码。Windows 和 Linux 按预期工作,但只有 mac 给我带来了问题。
我在 mac 开发人员库中阅读并发现:“在某些情况下,动态库永远不会被卸载:1)针对它的主要可执行链接,2)不支持卸载的 API(例如NSAddImage()) 用于加载它或其他一些依赖它的动态库,3) 动态库在 dyld 的共享缓存中。”
在我的情况下,我不属于前两种情况中的任何一种。我怀疑case3。
这是我的问题: 1. 我能做些什么来确保我有案例 3?2. 如果是,如何解决?3. 如果不是,如何解决?4. 为什么mac如此不同?
感谢您在这方面的任何帮助!
谢谢,扬