gpt4 book ai didi

c++ - dylib 析构函数不会被调用

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:36:30 25 4
gpt4 key购买 nike

我有一个 dylib,我可以在 mac os x 上通过注入(inject)加载它。构造函数调用效果很好。

 __attribute__((constructor))
static void initialize()

但是析构函数没有被调用?因此资源初始化泄漏。

__attribute__((destructor))
static void destroy()
  1. 如果应用程序退出,dylib 会自动卸载吗?
  2. 如果应用程序退出,注入(inject)的 dylib 会自动卸载吗?
  3. 我们如何在运行时从应用程序中卸载 dylib?作为它的注入(inject)代码,我可以访问私有(private)区域。是否有执行此操作的命令?

最佳答案

1、2:不会。当应用程序退出时,库并没有真正卸载——它们只是恰好与进程的其余部分一起消失,就像其他资源(例如文件句柄、映射内存、套接字,)在退出时释放。

3:取决于你如何注入(inject)库。例如,如果您使用 dlopen() 加载它,您应该能够使用 dlclose() 卸载库; NSBundle 有一些等效的东西。

请记住,卸载库很麻烦。特别是,卸载包含任何 ObjC 类的库是不安全的,因为运行时可能缓存了对您的类的引用。

关于c++ - dylib 析构函数不会被调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7531136/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com