一个复杂的软件也是有各个模块组装而成,我们需要单独对每个文件进行编译,然后再将它们包装起来,这个过程就是链接。链接的主要作用是将各个模块间的引用处理好。链接过程主要包括了 地址和空间分配 、符号决议、重定位。
有关符号决议的内容如下:
链接过程:
假如我们再main.c中引用了foo.c中的foo()函数,在编译main时我们需要暂时将foo函数的地址搁浅,等待去填入正确的地址。但是如果foo函数改变了,我们也需要重新填装地址。链接的过程将foo的地址符号化,根据符号去定位foo的地址,这是静态链接基本的作用。
链接之后,可以将代码中地址不确定的位置补充上,是重定位功能,具体解释如下: