4.2.3 符号解析
在平时的编程过程中,之所以要进行链接是因为我们目标文件中用到的符号被定义在其他文件
中,所以要将它们链接起来。例如,直接用ld来链接a.o,而不将b.o做为输入,链接器就会
发现shared和swap这两个符号没有被定义,会出现下面如图4.2.6的错误:
***图4.2.6***
上图所示的错误也是我们平时编程过程中遇到的常见问题之一,就是链接符号未定义。导致
这个问题的原因很多,最常见的一般都是链接时缺少某个库,或者输入目标文件路径不正确,
或者符号的定义和生命不一样。
通过上面的介绍,可以深层次的理解为什么缺少符号的定义会导致链接错误,其实重定位的
过程也伴随着符号解析的过程,每个目标文件中都可能定义一些符号,也可能引用其他目标
文件中定义的符号。重定位的过程中,每个重定位的入口都是对一个符号的引用,那么当链接器
需要对某个符号的引用重定位时,它就要确定这个符号的目标地址,这时候,链接器会查找
由所有输入目标文件的符号组成的全局符号表,找到后进行重定位,如果为找到,则报符号
未定义错误。