gpt4 book ai didi

C++:dlclose 不卸载共享库

转载 作者:可可西里 更新时间:2023-11-01 16:41:13 24 4
gpt4 key购买 nike

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

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

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

(编辑)

已解决:

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

最佳答案

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

此外,RTLD_NODELETE(在 dlopen 上)使 dlclose 不卸载库。

由于您没有使用 RTLD_NODELETE,很可能是加载的库使用了 RTLD_GLOBAL 引起的符号。

关于C++:dlclose 不卸载共享库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8792363/

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