【发布时间】:2020-01-20 03:02:37
【问题描述】:
我在Linux上有一个C++动态共享库abc.so,我的可执行程序用dlopen动态加载它,然后用rm + cp覆盖abc.so的新版本,以防使用@的inode发生变化987654327@,但有时也有coredump,我意识到这可能与动态共享库的延迟加载有关,但我无法确认,任何人都可以帮我弄清楚为什么?非常感谢!
【问题讨论】:
-
POSIX 系统(如 Linux)不会真正覆盖某些应用程序打开的文件。而是在磁盘上创建一个新文件,随后的打开调用将找到该文件。旧文件仍然存在,直到最后一个引用该文件的应用程序“关闭”它。
-
在重新启动程序之前可能什么都没有。 Ubuntu 现在正在提供内核热补丁以避免机器重新启动,但我不知道热补丁正在应用于用户空间。另请参阅 Ubuntu wiki 上的 Kernel Livepatch。微软多年来一直为内核和用户库提供热补丁。另请参阅Microsoft Detours 库。
标签: c++ linux coredump dlopen inode