共享库不能被dlclose关闭

时间:2012-08-26 15:26:34

标签: c++ linux shared-libraries

我在Linux中面临以下问题。我有一些使用外部库的应用程序(应用程序没有与它链接)。我按dlopen打开库并使用它中的一些符号。当我尝试按dlclose卸载库时出现问题,我仍然看到/proc/.../maps中已加载库。

更多尝试使用以下内容:

...
while(dlclose(module) == 0);
...

导致无限循环并且库仍然被加载。

有没有办法检查/查找谁拥有图书馆?

1 个答案:

答案 0 :(得分:2)

来自“man dlclose”:

The function dlclose() decrements the reference count on the dynamic
library handle handle.  If the reference count drops to zero and no
other loaded libraries use symbols in it, then the dynamic library
is unloaded.

您很可能与“没有其他已加载的库使用符号”条款相冲突。

您最好的选择是使用LD_DEBUG=bindings运行,并查看哪些其他库绑定到您要卸载的库。

另见this问题。