c - libc_nonshared.a 的用途是什么?

标签 c glibc libc

为什么libc_nonshared.a存在?它的用途是什么?我一直无法在网上找到它存在的好答案。
据我所知,它提供了某些符号( statlstatfstatatexit 等)。如果有人在他们的代码中使用这些函数之一,它将被链接到此存档中的最终可执行文件。这些函数是 POSIX 标准的一部分并且很常见,所以我不明白为什么它们不会被放在共享或静态 libc.so.6 中。或 libc.a , 分别。

最佳答案

这是 glibc 为 struct stat 的定义实现可扩展性的遗留错误。在考虑更好的机制(符号重定向或版本控制)之前。 stat 的定义-libc_nonshared.a 中的家庭功能导致结构的版本在链接时绑定(bind),并且那里的定义调用 __xstat -family 实际共享 libc 中的函数,它带有一个额外的参数,指示所需的结构版本。这个实现是 不合格符合标准,因为每个共享库最终都会获得自己的 stat 的副本-family 函数具有自己的地址,打破了指向同一函数的指针求值相等的要求。

关于c - libc_nonshared.a 的用途是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66701091/

相关文章:

c - 为什么在 glibc 引用中测试 int 的符号被称为 "sloppy code"?

linux - 为旧内核编译程序

raspberry-pi - 没有在 armhf 中实现 __fpclassify

c - 重定向断言失败消息

将 char 转换为 double

c - 如何在 C 中读取由 { , , } 格式分隔的数字的整个文件?

查找数组中是否缺少元素的复杂性

glibc - tcmalloc 和 glibc 暴露的符号冲突

c - 将指针数组传递给函数

error-handling - 如何以惯用的 Rust 方式处理来自 libc 函数的错误?