gpt4 book ai didi

c - libc 如何提供具有两个名称的函数?

转载 作者:太空狗 更新时间:2023-10-29 15:18:28 26 4
gpt4 key购买 nike

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 相同的地址和类型,但允许它被其他地方的“强”定义覆盖。

关于c - libc 如何提供具有两个名称的函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6672607/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com