glibc 标准库中的 libc_hidden_​​proto 有什么作用?

Jer*_*bas 4 c glibc unistd.h

我试图查找getpgrp()函数的原型,unistd.h但找不到它。该文件中唯一包含getpgrp的行是该行libc_hidden_proto (tcgetpgrp),我假设这是一个宏,但我不知道它的作用。

我用谷歌搜索但无法在网上找到任何关于libc_hidden_proto实际作用的解释。任何有关该宏在 glibc 中的用途的解释都将不胜感激。

o11*_*11c 5

您不小心查看了内部副本 ( include/unistd.h) 而不是公共副本 ( posix/unistd.h)。不,我也不明白 glibc 的源代码是如何组织的。

来自include/libc-symbols.h

   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)
Run Code Online (Sandbox Code Playgroud)