c++ - 在不破坏兼容性的情况下可以在 .so 库中更改什么

标签 c++ c shared-libraries .so

例如,我可以在头文件中添加新函数而不需要重新编译所有使用该库的程序吗?

最佳答案

您可以函数和对象添加到共享库,而不会破坏依赖该库的现有程序。在某些情况下,您可以增加库中对象(尤其是数组)的大小。

您也可以替换函数的实现,前提是函数签名不变。这不会对动态链接造成任何问题,但如果新实现的行为不符合现有程序的预期,那么您将看到程序行为不当。

您可以删除没有程序链接到的函数和对象。如果您只关心现有程序,那么您可以对这些程序和对象进行分类,否则您只能根据共享中的函数/对象的可见性进行评估库 -- 外部可见的函数和对象无法安全地删除。

可能还有共享库的其他特定于实现的细节,这些细节也可以在不破坏兼容性的情况下进行更改。

但是请注意,这些都与头文件没有任何直接关系。共享库的兼容性主要是运行时的考虑因素。头文件仅在编译时相关。

关于c++ - 在不破坏兼容性的情况下可以在 .so 库中更改什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39726747/

相关文章:

c - 为什么数组的元素打印不正确?

c - dnotify 在内核 4.x 中是否已过时?

unix - 出于共享的目的,何时将共享库视为 "the same"?

c - ldd 命令在某个任意位置搜索库

c++ - 如何在类声明中动态初始化变量,而不是常量

c++ - 什么是 move 语义?

c - C 中的多行消息发送不起作用

c++ - MacOSX 上 Google Perftools CPU 分析器中的行号

c++ - freopen() 的 Python 版本

c - 如何链接到共享库?