dylib析构函数未被调用。

5

我有一个dylib文件,可以通过注入的方式在Mac OS X上加载。构造函数调用正常。

 __attribute__((constructor))
 static void initialize()

但是析构函数没有被调用?因此资源会泄漏。
__attribute__((destructor))
static void destroy()
  1. 如果应用程序退出,dylib会自动卸载吗?
  2. 如果应用程序退出,注入的dylib会自动卸载吗?
  3. 在运行时如何从应用程序中卸载dylib?由于它是注入代码,我可以访问私有区域。是否有一个命令来做这个?

问题续篇 http://stackoverflow.com/q/7553355/802921 - RLT
1个回答

4

1, 2:不,当一个应用程序退出时,库并没有真正被卸载 - 它们只是和其他资源(如文件句柄、映射内存、套接字等)一样在进程结束时消失。

3:这取决于你是如何注入库的。如果你使用类似 dlopen() 的方法加载它,那么你应该能够使用 dlclose() 来卸载库;类似的,NSBundle 也有相应的方法。

请注意,卸载库会带来混乱。特别地,卸载包含任何 ObjC 类的库是不安全的,因为运行时可能已经缓存了对你的类的引用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接