热门问题
时间线
聊天
视角
弱符号
来自维基百科,自由的百科全书
Remove ads
弱符号(Weak symbol)是链接器在生成ELF文件的过程中使用的一种特殊属性符号。默认情况下,如果没有特别声明,目标文件里面的符号都是强符号。在链接过程中,一个强符号会优先于一个同名的弱符号。相比之下,两个同名强符号一起链接会出现链接错误。当链接一个可执行文件,弱符号可以不定义。但对于强符号,如果没有定义,连接器会产生一个“符号未定义”错误 (undefined symbol)。使用弱符号的目的是,当不确定这个符号是否被定义的情况下,链接器也可以成功链接出ELF文件,适用于某些模块还未实现的情况下,其他模块的先行调试。 弱符号在C语言和C++语言的规范里面没有被提及,所以使用弱符号的代码,移植性不是非常好。[1]
语法
GCC和Solaris Studio C对于弱符号使用相同的声明, # pragma weak 或者使用函数或变量的属性声明 , __attribute__((weak))。[2][3][4][5][6][7]
// function declaration
#pragma weak power2
int power2(int x);
// function declaration
int __attribute__((weak)) power2(int x);
// or
int power2(int x) __attribute__((weak));
// variable declaration;
extern int __attribute__((weak)) global_var;
参考
Wikiwand - on
Seamless Wikipedia browsing. On steroids.
Remove ads