gpt4 book ai didi

c++ - 如果我在 Linux 上更改 C++ 动态共享库,而我的可执行程序在其上使用,会发生什么

转载 作者:太空狗 更新时间:2023-10-29 21:09:36 26 4
gpt4 key购买 nike

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

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com