libc如何提供两个名称的函数?

Before the advent of direct binding (-B direct) libc provided many
functions with two names. For example, getpwent() and _getpwent().
These two names referred to exactly the same function in libc.

libc如何使两个函数名指向同一个实现?

我认为它不应该像写两次相同的代码那么容易.

它是通过弱别名完成的,这是一种“非标准”链接器技巧,自早期unices以来一直存在,并且得到了我所知道的所有unix编译器/链接器的支持.它基本上完成为:

void __foo(void);
void foo(void) __attribute__((weak, alias("__foo")));

通常用宏来抽象它一点点.这使得符号foo默认具有与符号__foo相同的地址和类型,但允许它被其他地方的“强”定义覆盖.

相关文章
相关标签/搜索