弱符号机制允许同一个符号的定义存在于多个文件中。
目前的链接器本身并不支持符号的类型,即变量类型对于链接器来说是透明的,它只知道一个符号的名字,并不知道类型是否一致。
多个符号(同名)定义类型不一致的几种情况
- 两个或两个以上强符号类型不一致【非法,报错】
- 有一个强符号,其他都是弱符号,出现类型不一致
- 两个或两个以上弱符号类型不一致
编译器将未初始化的全局变量定义作为弱符号处理。
COMMON类型的链接规则:原则上讲最终链接后的输出文件中,弱符号的大小以输入文件中最大(所占空间)的那个为准
如果有 一个符号为强符号,那么最终输出结果所占空间大小与强符号相同。【如果链接过程中,有弱符号大于强符号,编译器会报警告】
未初始化的全局变量最终还是被放在BSS段的
一旦有一个未初始化的全局变量不是以COMMON块的形式存在,那么它就相当于一个强符号。