我在 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/

10-13 04:03
查看更多