linux - 使用 dlopen 重新加载动态库时如何将全局变量保留在动态库中

标签 linux dlopen

我尝试使用dlopen加载带有RTLD_NODELETE标志的动态库,以保留全局变量并确保下次我使用dlopen重新加载它时它们不会被重新启动。

但是当我想在库内的某些函数更新时重新加载库时, dlopen(在重新加载之前,我调用了接口(interface)dlclose)似乎不起作用。这些函数使用相同的旧代码运行。

所以我现在很困惑。

当使用dlopen重新加载动态库时,如何将全局变量保留在动态库中。 (更新函数但保持变量不变。)

最佳答案

so i am confused now.

这正是 RTLD_NODELETE 的含义:在这样的库上 dlclose 是(实际上)无操作。由于代码实际上的行为就好像dlclose从未被调用过,因此后续的dlopen也不会重新加载代码(它实际上变成了无操作)也就不足为奇了。

how can i keep global viriables in dynamic library when using dlopen to reload it. (update the functions but leave the virables not changed)

你不能。

关于linux - 使用 dlopen 重新加载动态库时如何将全局变量保留在动态库中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18372797/

相关文章:

regex - 如何在shell脚本中使用 'sed'替换文件中的一行

python - Kali 上的 Pyinstaller 为 Windows XP 创建 exe

php - 有什么办法可以将屏幕内容打印到网页上吗?

c++ - 如何查找使用 dlopen() 打开的库的覆盖率?

c++ - 是否有 Linux 等效的 SetupDiGetClassDevs 函数

linux - 当操作系统终止您的进程时返回代码

ios - 函数 'dlopen()' 是私有(private) API 吗?

shared-libraries - 是什么导致sprof提示“ld.so检测到不一致”?

linux - dlopen 与链接开销

c++ - Solaris 进程如何读取自己的符号表?