我们通过前面的空间和 地址分配可以得知,链接器在完成地址和空间分配之后就已经确定了所有符号的虚拟地址了,那么链接器就可以根据符号的地址对每个须要重定位的指令进行地位修正。...链接器就会发现 shared和swap两个符号没有被定义,没有办法完成链接工作:
这也是我们平时在编写程序的时候最常碰到的问题之一,就是链接时符号未定义。...重定位的过程中,每个重定位的入口都是对一个符号的引用,那么当链接器须要对某个符号的引用进行重定位时,它就要确定这个符号的目标地址。...比如我们查看“a.o”的符号表:
GLOBAL”类型的符号,除了“main”函数是定义在代码段之外,其他两个“ shared和“swap”都是“UND”,即“ undefined”未定义类型,这种未定义的符号都是因为该目标文件中有关于它们的重定位项...所以在链接器扫描完所有的输入目标文件之后,所有这些未定义的符号都应该能够在全局符号表中找到,否则链接器就报符号未定义错误。