我即将解决这个问题。我读了几个关于dlopen的问题,但仍然不清楚。似乎dlopen是通过calloc或malloc分配内存。但是如何释放这段记忆呢?
类似的代码指出“dl”
的泄漏问题(snip)
Event alloc_fn: Called allocation function "dlopen"
Event var_assign: Assigned variable "dl" to storage returned from "dlopen(&"libc.so.6",1)"
261 dl = dlopen("libc.so.6", RTLD_LAZY);
At conditional (1): "dl" taking true path
262 if (dl) {
Event noescape: Variable "dl" not freed or pointed-to in function "dlsym"
263 func = dlsym(dl, "fdopen");
264 }
265 assert(func != NULL);
266 }
Event leaked_storage: Variable "dl" goes out of scope
267 return (*func)(fd, mode);
(snip)
这是一个错误还是我们需要忽略它?如果我需要修理,请任何人指导我修理它吗?
谢谢, Boobesh
答案 0 :(得分:1)
仔细阅读dlopen(3)手册页。另请阅读Drepper的论文How To Write Shared Libraries,其中提供了许多有趣的解释。
您可以通过调用dlopen
dlclose
获取的资源
请注意您使用dlopen
编辑的插件使用或提供的资源。该插件可能具有所谓的构造函数或析构函数,例如用GCC function attribute constructor
等声明的函数......
你也可以不在乎,也不用打扰dlclose
来接受一些泄漏。实际上,在Linux上,你可以毫不费力地调用数十万次dlopen
(只有你的地址空间会增长),请参阅我的manydl.c示例。