C++:dlclose不会卸载共享库

Ben*_*Ben 9 c++ shared dlopen

我有一个使用dlopen(带有标志RTLD_NOW | RTLD_GLOBAL)加载的共享库.如果此库正在使用主程序中的函数,则它不会卸载.所以我最终得到了这个共享库的相同代码,即使我卸载(使用dlclose),更改,编译,(重新)加载它.

我的目标实际上是在对其进行更改后重新加载相同的库,这样我就不必重新启动整个程序来测试我的代码.

我在Linux Ubuntu 10.04上使用g ++ 4.2.3.

(编辑)

解决了:

"由于RTLD_GLOBAL,"加载的库使用符号".实际上,我在链接时嵌入了另一个.a嵌入的符号,可能会被回调并阻止我的库关闭...我认为可以使用dlopen(...,RTLD_NOLOAD)验证是否已卸载lib以检出库已正确卸载.

cat*_*eof 4

该函数dlclose()减少动态库句柄上的引用计数。如果引用计数降至零并且没有其他加载的库使用其中的符号,则卸载动态库。

RTLD_NODELETE(on dlopen)也使得dlclose不卸载库。

由于您没有使用过RTLD_NODELETE,最有可能的是加载的库使用了由于RTLD_GLOBAL.