linker如何解析多处定义的全局符号【读书摘记】
2009-09-01 15:00
218 查看
from:深入理解计算机系统
对于全局符号的引用解析,当编译器遇到一个不是在当前模块中定义的符号(变量或函数名)时,它会假设该符号是在其他某个模块中定义的,生成一个linker符号表表目,并把它交给linker处理。如果linker在它的任何输入模块中都找不到这个被引用的符号,它就输出一条错误信息并终止。
在编译时,编译器输出每个全局符号给汇编器,或者是强(strong),或者是弱(weak),而汇编器把这个小溪隐含地编码在可重定位目标文件的符号表里。函数和已初始化的的全局变量是强符号,未初始化的全局变量是弱符号。
unix linker使用下面的规则来处理多出定义的符号:
1. 不允许有多个强符号
2. 如果有一个强符号和多个弱符号,选择强符号
3. 如果有多个弱符号,那么从这些弱符号中任选一个
对于全局符号的引用解析,当编译器遇到一个不是在当前模块中定义的符号(变量或函数名)时,它会假设该符号是在其他某个模块中定义的,生成一个linker符号表表目,并把它交给linker处理。如果linker在它的任何输入模块中都找不到这个被引用的符号,它就输出一条错误信息并终止。
在编译时,编译器输出每个全局符号给汇编器,或者是强(strong),或者是弱(weak),而汇编器把这个小溪隐含地编码在可重定位目标文件的符号表里。函数和已初始化的的全局变量是强符号,未初始化的全局变量是弱符号。
unix linker使用下面的规则来处理多出定义的符号:
1. 不允许有多个强符号
2. 如果有一个强符号和多个弱符号,选择强符号
3. 如果有多个弱符号,那么从这些弱符号中任选一个
相关文章推荐
- 链接器如何解析多处定义的全局符号
- 如何解决VS2010 MySql Connect C 链接mysql:error LNK2019: 无法解析外部符号的问题
- 在VC++MFC下如何定义全局变量和全局函数
- C\C++小知识: 如何引用一个已经定义过的全局变量 与 全局变量可不可以定义在可被多个.C文件包含的头文件中
- 浅谈在vue项目中如何定义全局变量和全局函数
- 全局变量重复定义,fatal error LNK1169: 找到一个或多个多重定义的符号
- android 如何定义全局变量
- 在MFC下如何定义全局变量和全局函数VC++
- 【debug】vs2013中定义的全局变量count在使用时提示:“不明确的符号”
- 全局符号介入如何处理
- ”无法解析的外部符号 _pcap_freealldevs“ 解决 【如何在vs2008中使用winpcap编程】
- 如何在Snap包中定义全局的plug
- js中如何定义和使用全局变量
- 在MFC下如何定义全局变量
- 在MFC下如何定义全局变量和全局函数
- 在MFC下如何定义全局变量和全局函数VC++
- 在MFC下如何定义全局变量和全局函数
- Vue中如何定义全局函数
- 全局变量的定义,以及如何处理头文件包含关系
- C项目如何转C++项目——error LNK2019: 无法解析的外部符号 "unsigned int __cdecl