如果我在 Linux 上更改C++动态共享库,而我的可执行程序在其上使用,会发生什么
what would happened if I changed the C++ Dynamic Shared Library on Linux while my executable program using on it
我在Linux上有一个C++动态共享库abc.so
,我的可执行程序用dlopen
动态加载它,然后在使用abc.so
的索引节点更改的情况下使用rm + cp
的新版本覆盖abc.so
,但有时也有核心转储,我意识到这可能与动态共享库上的延迟加载有关, 但我无法确认,任何人都可以帮助我找出原因?非常感谢!
如果没有自己调查的可能性,这变得具有推测性,但使用:
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++动态共享库,而我的可执行程序在其上使用,会发生什么
- 调试和发布库及其可执行程序
- 使用 RS232 电缆将可执行程序发送到硬件(微处理器)
- 调用Android内部的C++可执行程序
- c++可执行程序的分布式计算
- 在 Ubuntu 中创建一个文件作为 C 中的可执行程序
- 源代码构建中的 SCons 仅适用于可执行程序,不适用于目标文件
- 当我们不给 C 可执行程序参数时如何处理异常
- C++11与OpenMP结合使用,可执行程序速度较慢
- 从QtCreator导出可执行程序
- c++虚拟函数和可执行程序
- 启动使用附加库的可执行程序
- 英特尔至强Phi -运行多个单线程可执行程序
- 如何在c++中创建独立的可执行程序
- valgrind/callgrind可以在发布的可执行c++程序上工作吗?
- 使用nvcc的可执行程序比使用gcc/g++和OpenCL的可执行文件大
- C++的可执行程序场景(BDD)
- 如何在C#中启动一个具有特定指导原则的可执行程序
- Readelf报告程序是一个共享库,而不是可执行程序