c++ - 运行时更新.so文件时如何传输STL容器数据

标签 c++ shared-libraries

我有 .so 文件,其中使用了一些 STL 容器。 问题是我对实时卸载 .so 的 X 版本并将其替换为 .so 的 Y 版本感兴趣,但不会丢失数据。如果数据只是原始内存,我可以在切换时转发指针,但我想使用常规的 STL 容器。有什么办法吗。复制是没有问题的,只要里面的数据可以传输就行。 当我卸载旧的 .so 时,静态析构函数也会被激活吗?

最佳答案

1) 让 X.so 将它的数据保存到一个文件(带有版本号!),卸载 X.so,加载 Y.so,让 Y.so 从文件加载数据。
2) 改用版本名称,加载两者,让 Y.so 直接从 X.so 的容器中填充它的容器(检查版本号!),然后卸载 X.so。

我真的不建议直接传递容器,因为如果 ABI 出于任何原因不兼容,它会编译得很好,但在运行时会崩溃。这也使得故意更改 ABI 变得更加容易。

关于c++ - 运行时更新.so文件时如何传输STL容器数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7920448/

相关文章:

c++ - 用于检查语言版本的预处理器#define? C++98/C++03/C++11

c++ - 为什么在编译时选择这个虚方法的实现?

具有共享 Dlib 库的 C++ 程序在 Ubuntu 14.04 上速度极慢

ubuntu - 在 Ubuntu 上安装 ViennaCL

c++ - Windows 上 DLL Exporting/Importing 和 Extern 的问题

c++ - #if 对比#ifndef 对比#ifdef

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

c++ - 类型之间的转换

linux - 运行 ltrace 时没有输出

ubuntu - 编译caffe : libpng and libgfortran not found,共享库时出现ld错误