我的问题假设 x86 或 x86_64 的 gcc 或 clang。
假设我有以下文件:
// weak.c
#include <stdio.h>
__attribute__((weak))
void i_am_weak(void)
{
printf("I am weak\n");
}
int main()
{
i_am_weak();
return 0;
}
// not_weak.c
#include <stdio.h>
void i_am_weak(void)
{
printf("I am not weak\n");
}
如果我只编译weak.c
:cc weak.c -o weak
然后运行它,我会收到“我很弱”的消息。反过来,如果我编译并链接两者:cc weak.c not_weak.c
我得到消息“我并不弱”。这是可以预料的。
我能以某种方式获得弱符号的地址吗?假设我想调用i_am_weak
from weak.c
from not_weak.c
,类似于我在使用链接器标志时使用__real_i_am_weak
from的方式。__wrap_i_am_weak
--wrap