计算机科学

首页 > 计算机科学

弱符号

2018-09-03 09:47:41     所属分类:调试

弱符号(Weak symbol)是链接器在生成ELF文件的过程中使用的一种特殊属性符号。默认情况下,如果没有特别声明,目标文件里面的符号都是强符号。在链接过程中,一个强符号会优先于一个同名的弱符号。相比之下,两个同名强符号一起链接会出现链接错误。当链接一个可执行文件,弱符号可以不定义。但对于强符号,如果没有定义,连接器会产生一个“符号未定义”错误 (undefined symbol)。使用弱符号的目的是,当不确定这个符号是否被定义的情况下,链接器也可以成功链接出ELF文件,适用于某些模块还未实现的情况下,其他模块的先行调试。 弱符号在C语言和C++语言的规范里面没有被提及,所以使用弱符号的代码,移植性不是非常好。[1]

目录

  • 1 语法
    • 1.1 Pragma 方式
    • 1.2 Attribute 方式
  • 2 参考

语法

GCC和Solaris Studio C对于弱符号使用相同的声明, # pragma weak 或者使用函数或变量的属性声明 , __attribute__((weak))。[2][3][4][5][6][7]


Pragma 方式

// function declaration
#pragma weak power2
int power2(int x);

Attribute 方式

// function declaration
int __attribute__((weak)) power2(int x);
// or
int power2(int x) __attribute__((weak));
// variable declaration;
extern int __attribute__((weak)) global_var;

参考

  1. ^ Drepper, Ulrich. weak handling. 2000-06-07. 
  2. ^ GCC Manual, 6.58.9 Weak Pragmas. 
  3. ^ GCC Manual, 6.30 Declaring Attributes of Functions. GNU. [2013-05-29]. 
  4. ^ GCC Manual, 6.36 Specifying Attributes of Variables. 
  5. ^ Oracle Solaris Studio 12.3: C User's Guide, 2.11.27 weak. 
  6. ^ Oracle Solaris Studio 12.3: C User's Guide, 2.9 Supported Attributes. 
  7. ^ Oracle Solaris 11 Express 11/10 Linker and Libraries Guide, 2.11 Weak Symbols. 
版权声明:本文由北城百科网创作,转载请联系管理获取授权,未经容许转载必究。https://www.beichengjiu.com/computerscience/340510.html

显示全文

取消

感谢您的支持,我会继续努力的!

扫码支持
支付宝扫一扫赏金或者微信支付5毛钱,阅读全文

打开微信扫一扫,即可进行阅读全文哦


上一篇:反汇编器
下一篇:栈追踪
相关推荐
爱淘宝