我有 .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/