在直接绑定(-B direct)出现之前,libc提供了许多具有两个名称的函数.例如,getpwent()和_getpwent().这两个名称在libc中引用了完全相同的功能.
libc如何使两个函数名指向同一个实现?
我认为这不应该像写两次相同的代码那么容易.
它是通过弱别名完成的,这是一种"非标准"链接器技巧,自早期开发以来一直存在,并且得到了我所知道的所有unix编译器/连接器的支持.它基本上完成为:
void __foo(void);
void foo(void) __attribute__((weak, alias("__foo")));
Run Code Online (Sandbox Code Playgroud)
通常用宏来抽象它一点点.这使得foo符号__foo默认具有与符号相同的地址和类型,但允许它被其他地方的"强"定义覆盖.
| 归档时间: |
|
| 查看次数: |
881 次 |
| 最近记录: |