Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
我曾尝试使用dlopen该标志加载动态库,RTLD_NODELETE以保留全局变量并确保下次我使用dlopen重新加载它时不会重新启动它们。
dlopen
RTLD_NODELETE
但是当我想在库中的某些函数更新时重新加载库时,dlopen(在重新加载之前我调用了接口dlclose)似乎不起作用。这些函数使用相同的旧代码运行。
dlclose
所以我现在很困惑。
dlopen使用重新加载时如何将全局变量保留在动态库中。(更新函数但保持变量不变。)
这正是RTLD_NODELETE意味着:dlclose在这样的库上(实际上)是无操作的。由于代码实际上表现得好像dlclose从未被调用过,因此后续dlopen也不会重新加载代码也就不足为奇了(它实际上也变成了无操作)。
使用 dlopen 重新加载时,如何将全局变量保留在动态库中。(更新功能但保持病毒不变)
你不能。