为什么libc_nonshared.a
存在?它的用途是什么?我一直无法在网上找到它存在的好答案。
据我所知,它提供了某些符号( stat
、 lstat
、 fstat
、 atexit
等)。如果有人在他们的代码中使用这些函数之一,它将被链接到此存档中的最终可执行文件。这些函数是 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/