glibc标准库中的libc_hidden_proto做什么?

glibc标准库中的libc_hidden_proto做什么?,c,glibc,unistd.h,C,Glibc,Unistd.h,我试图在unistd.h中查找getpgrp()函数的原型,但找不到它。该文件中包含getpgrp的唯一一行是libc\u hidden\u proto(tcgetpgrp),我假设这是一个宏,但我不知道它是做什么的 我在谷歌上搜索了一下,但在网上找不到任何关于libc\u hidden\u proto实际功能的解释。任何关于该宏在glibc中的用途的解释都将不胜感激。您无意中看到了内部副本(include/unistd.h),而不是公共副本(posix/unistd.h)。不,我也不明白gli

我试图在
unistd.h
中查找
getpgrp()
函数的原型,但找不到它。该文件中包含getpgrp的唯一一行是
libc\u hidden\u proto(tcgetpgrp)
,我假设这是一个宏,但我不知道它是做什么的


我在谷歌上搜索了一下,但在网上找不到任何关于
libc\u hidden\u proto
实际功能的解释。任何关于该宏在glibc中的用途的解释都将不胜感激。

您无意中看到了内部副本(
include/unistd.h
),而不是公共副本(
posix/unistd.h
)。不,我也不明白glibc的来源是如何组织的

发件人:


您使用的是什么版本的glibc?我没有任何
libc\u hidden\u proto
,但我确实记得它来自古代……这很奇怪。我正在使用glibc 2.19,但我也在查看glibc 2.18、2.20、2.21和2.23中的unistd.h头文件,我在所有这些版本中都看到了libc_hidden_proto。谢谢。实际上我已经读过它在libc符号中所说的。h但是我不理解PLT是什么,所以我没有在我的问题中提到libc符号。但无论如何,你的答案是+1。现在,我开始阅读PLT、GOT、ELF文件、链接器、动态加载以及其他我不知道的数百万件事情:P@jerry基本上,对于这些符号,它就像是
-f语义插入。它只在glibc内部起作用,因为他们做了其他疯狂的事情。
   The following macros are used for PLT bypassing within libc.so
   (and if needed other libraries similarly).
   First of all, you need to have the function prototyped somewhere,
   say in foo/foo.h:
   int foo (int __bar);
   If calls to foo within libc.so should always go to foo defined in libc.so,
   then in include/foo.h you add:
   libc_hidden_proto (foo)