- 原始的链接器概念早在高级编程语言出现之前就已经存在了
- 最早的程序员 用机器语言编写程序,并记录在纸带或卡片上
- 更高级编程语言的出现
- 程序越来越复杂,需要人开发不同的程序模块
- 子程序(函数)起始地址和变量起始地址是符号定义
- 调用子程序(函数或过程)和使用变量即是符号的引用(reference)
- 一个模块定义的符号可以被另一个模块引用
- 最终须编译,链接,链接时须在符号引用处填写定义处的地址
使用链接的好处
模块化
1)一个程序可以分成很多源程序文件
2)可以构建共享函数库,如数学,C标准库(多人开发,代码重用,开发效率高)
例如 libc.a(C标准库):包含1392个目标文件(约8MB),包含I/O,存储分配,信号处理,字符串处理,时间和日期,随机数生成,定点整数算术运算。效率高
1)时间上,可分开编译
只需要重新编译被修改的源程序文件,然后重新链接
2)空间上,无需包含共享库所有代码
源文件中无需包含共享库函数的源码,只要直接调用即可
(例如, 只要直接调用printf()函数,无需包含其源码)
可执行文件和运行的内存中只需包含所调用函数的代码(即printf的二进制函数源码)而不需要包含整个共享库
(例如,只包含printf.o的代码,不包括libc.a中其他函数的代码)