一、链接的定义
链接
(linking)是将各种代码和数据片段收集并组合成为一个单一文件的过程,这个文件可被加载(复制)到内存并执行。
二、链接的作用
链接
将帮助我们构造大型程序链接
将帮助我们避免一些危险的编码错误链接
将帮助我们理解语言的作用域规则是如何实现的链接
将帮助我们理解其他重要的系统概念链接
将是我们能够利用共享库
三、链接过程那些事
在这段我将重点介绍 数据在`ELF文件` (Executable and Linkable Format,可执行可链接格式)中位置信息。
1、程序员当然是从Hello World!
开始啦!所以我们先创建一个main.c
文件 如下
2、用 gcc -c main.c -o main.o
将main.c
文件转化为main.o
3、用objdump -d main.o
我们将得到其汇编代码,如下:
从图中我们可以看到最左侧的0:
表示的这个程序起始地址为0,造成这个的原因是我们还没链接,还没有重定位
4、用gcc -O2 -o main main.c
得到名为main
的可执行文件
5、再用objdump -d main
可以看到如下:
它的起始地址是401000
与图3的起始地址不同。