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

标签 glibc

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

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

即匹配:

我正在查看 glibc 2.19 上的 readelf 输出,我看到了 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 有两个版本呢? 还有哪些其他原因促使开发人员启动功能的“新版本”?

最佳答案

如果 ABI 发生变化,界面也会发生变化,例如内部结构的一些变化可以通过针对旧版本库编译的代码看到。这需要新的版本符号。

默认情况下,编译代码时会选择当前版本。 glibc 还提供了旧版本,允许人们获取使用旧 glibc 版本编译的二进制文件(由供应商提供)并在自己的计算机(具有较新的 glibc 版本)上运行它们。

关于glibc - 为什么 glibc 有 2 个版本的相同功能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28662607/

相关文章:

c - 使用直接 I/O 进行数据传输的内存对齐要求

编译 glibc :/glibc-2. 7/w/elf/ld.so: 没有那个文件或目录

c++ - 将库与较新的 GLIBC 依赖项链接起来

c - vdso gettimeofday,具有 64 位内核和为 32 位编译的应用程序

c - scanf 注册新的转换说明符

c - (struct _IO_FILE *)->_IO_read_base 如何设置?

c++ - 删除对象时双重释放或损坏(另一个......)

ubuntu - 如何构建 glibc 包的数学库?

docker - 我是追鬼吗? muslc环境中glibc exe中的动态链接库

linux - aarch64 的 glibc 版本