为什么同样的功能 glibc 有 2 个版本?

为什么同样的功能 glibc 有 2 个版本?

我不太了解glibc的版本控制机制。

在什么情况下,开发人员会决定某个函数需要新版本,并且该函数在 glibc 中不再“向后兼容”,GLIBC_2.X需要引入新版本?

对于函数原型更改或 API 更改的情况,我理解,但还有哪些原因呢?

即 fnmatch:

我正在查看readelfglibc 2.19 上的输出,我看到了 2 个版本的 fnmatch:

151: 000bff40   892 FUNC    GLOBAL DEFAULT   12 fnmatch@GLIBC_2.0
152: 000bff40   892 FUNC    GLOBAL DEFAULT   12 fnmatch@@GLIBC_2.2.3

但是当我查看 glibc 的代码时,我发现它们是完全相同的函数:

versioned_symbol (libc, __fnmatch, fnmatch, GLIBC_2_2_3);
#  if SHLIB_COMPAT(libc, GLIBC_2_0, GLIBC_2_2_3)
strong_alias (__fnmatch, __fnmatch_old)
compat_symbol (libc, __fnmatch_old, fnmatch, GLIBC_2_0);
#  endif

那么为什么 fnmatch 有两个版本呢?开发人员启动功能的“新版本”还有哪些其他原因?

相关内容