弱符号

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

语法 

GCC和Solaris Studio C对于弱符号使用相同的声明，  # pragma weak   或者使用函数或变量的属性声明 ， __attribute__((weak))。

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;

参考 

数据类型
调试