为什么libtool的“当前”在BSD上被用作“SOVERSION”,而不是“主要”?

时间:2013-03-05 04:36:15

标签: shared-libraries freebsd elf bsd libtool

在类Unix系统上,动态共享库(.so文件)有SONAME。 它可以通过以下方式提取: readelf -a libfoo.so.0.3.2 | grep SONAME - > libfoo.so.0。 最后一部分也称为SOVERSION。 该版本号标记了二进制兼容(ABI)库的版本。 因此,当程序链接到库的一个版本时,如果SOVERSION没有更改,它也可以使用更高版本。

Libtool有一个-version-info机制来决定SOVERSION currentrevisionage这样的current。 线索是:major = current - age在兼容的更改中也会增加,SOVERSION会在大多数系统上用来设置SOVERSION

但是,在BSD(FreeBSD,NetBSD,OpenBSD)上,current设置为SOVERSION,这在很多地方都有提及,例如 suse-wiki, 我也在上述平台上对此进行了测试。

问题是:为什么libtool会在BSD上执行此操作? 为什么这被认为是“BSD这样做的方式”?

这意味着Linux / Darwin / SunOS的每个兼容更改都是BSD的不兼容更改,因为{{1}}更改。

1 个答案:

答案 0 :(得分:3)

至少有一位发布在GNU邮件列表上的开发人员认为,这可能被视为一个错误:

https://lists.gnu.org/archive/html/bug-libtool/2011-05/msg00007.html

该电子邮件还充满了对各种BSD的库版本控制策略的有用参考,这似乎与libtool的行为相矛盾