[1]程序经过预处理和编译之后变成可重定位目标文件。每一个可重定位目标文件都有一个表,这个表含有当前文件定义的变量(函数),引用的函数。
这些变量有几种类型:(1)当前模块定义的全局变量(非static)(2)当前模块定义全局变量(非static)(3)非当前模块定义的但是却被当前模块引用。所有的局部变量都是不被连接器care的。
[2]当有多个文件的时候,每一个Global变量都是全局可见的。所以如果出现了多个global变量而且是相同的名字,那么如何知道会使用哪一个变量呢?规则如下:
什么叫做强弱符号?简单的来说,就是未初始化的全局变量叫做弱符号,初始化的全局变量和函数叫做强符号。
[3]静态库:静态库是一个有一系列可重定位文件的集合,然后链接器按照下面的算法来进行扫描和链接,只将相关的模块拷贝进取。
注意到链接文件的顺序非常重要,如果两个存档文件a引用了b的成员,a必须在命令行参数的位置在b之前,否则会出现连接错误。看一个小例子: