我应该什么时候更新so版本?

When should I update so version?

我遵循一个库的版本方案,版本号由三部分组成,so 版本由两部分组成。 example-1.0.0 和 libexample.so.1.0.

当我在不破坏 ABI 的情况下进行更改时,版本字符串中的最后一个数字会更新。第二个数字在我添加新符号时更新,主版本号用于不兼容的更改。

即使不破坏与其他程序的兼容性,添加符号时也会更新 so 版本。这意味着程序需要重新编译,因为 so 版本已经更改,即使库仍然与旧版本兼容。

添加新符号时是否应该避免更新so版本?

This means that programs need to be recompiled because the so version has changed even if the library still is ABI compatible with older versions.

那说明你没有做对。在进行 ABI-incompatible 更改时,您应该 更改 SONAME。习惯上用example.1作为SONAMEDocumentation.

P.S。如果您只关心 Linux,您可能应该完全停止进行外部版本控制,而是使用符号版本控制来提供单个 libexample.so.1,为新旧客户端二进制文件提供多个 ABI-incompatible 符号.