我在 Linux 上有一个 C++ 动态共享库 abc.so
,我的可执行程序使用 dlopen
动态加载它,然后使用 abc.so
用新版本覆盖 rm + cp
以防使用 abc.so
的 inode 发生变化,但有时也有 coredump,我意识到这可能与动态共享库上的延迟加载有关,但我无法确认,任何人都可以帮助我找出原因吗?非常感谢!
最佳答案
没有自己调查的可能性,这变得推测,但使用:
rm abc.so
cp new_version.so abc.so
对已经加载
abc.so
的程序没有影响。对于与 abc.so
链接的程序(或使用 dlopen
加载它),如果在删除文件或将文件复制到位时启动(或使用 dlopen
)它们会出现问题。结果很可能是核心转储。替换
abc.so
的更好方法:copy new_version.so to the same filesystem as abc.so (like the same directory)
mv new_version.so abc.so
这确保了
abc.so
的完整版本始终存在于预期的位置。任何需要它的程序都将获得旧版本或新版本 - 两者之间没有任何内容。关于c++ - 如果我在 Linux 上更改 C++ 动态共享库,而我的可执行程序在它上面使用,会发生什么,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58004892/