我不太了解glibc的版本控制机制。
在什么情况下,开发人员会决定某个函数需要新版本,并且该函数在 glibc 中不再“向后兼容”,GLIBC_2.X
需要引入新版本?
对于函数原型更改或 API 更改的情况,我理解,但还有哪些原因呢?
即 fnmatch:
我正在查看readelf
glibc 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 有两个版本呢?开发人员启动功能的“新版本”还有哪些其他原因?