我尝试使用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/