为什么glibc有两个相同功能的版本?

时间:2015-02-22 20:04:49

标签: glibc

我不完全理解glibc的版本控制机制。 在什么情况下开发人员决定一个函数需要一个新版本,并且该函数不再在glibc中“向后兼容”并且需要引入一个新的GLIBC_2.X版本?

对于函数的原型更改或API更改,我理解,但还有更多原因吗?

即。的fnmatch:

我正在看glibc 2.19上的readelf输出,我看到了两个版本的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甚至有两个版本? 开发人员还有什么其他原因可以启动函数的“新版本”?

1 个答案:

答案 0 :(得分:2)

在ABI改变的情况下,界面也会改变,例如内部结构的一些变化,这些变化可以通过针对旧版本库编译的代码来显示。这需要新版本的符号。

默认情况下,在编译代码时,会选择当前版本。 glibc还提供了旧版本,允许用旧版glibc版本编译的二进制文件(由供应商提供)并在一台机器上运行它们(它有一个较新的glibc版本)。