您的位置:首页 > 其它

第七章 链接

2015-10-14 19:17 253 查看
## 链接 ##


链接(linking):是将各种代码和数据部分收集起来并组合成为一个单一文件的过程。

这个文件可被加载到存储器并执行。

链接可以执行于编译时,加载时,运行时。

链接是由链接器(linker)的程序自动执行的。

链接通常是由链接器来默默处理的。理解链接器将帮助你:

构造大型程序

避免一些危险的编程错误

理解语言的作用域规则是如何实现的

理解其他的系统概念

能够利用共享库

7.1 编译器驱动程序

大多数编译系统提供编译驱动程序(compiler driver),它代表用户在需要时调用语言预处理器、编译器、汇编器和链接器。

7.2 静态链接

静态链接器(static linker):以一组可重定位目标文件和命令行参数作为输入,生成一个完全链接的可以加载和运行的可执行目标文件作为输出。

链接器完成两个主要任务:

符号解析(symbol resolution)。

重定位(relocation)。

7.3 目标文件

目标文件有三种形式:

可重定位目标文件。

包含二进制代码和数据,其形式可以在编译时与其他可重定位目标文件合并起来,创建一个可执行目标文件。

可执行目标文件。

包含二进制代码和数据,其形式可以被直接拷贝到存储器并执行。

共享目标文件。

一种特殊类型的可重定位目标文件,可以在加载或者运行时被动态地加载到存储器并连接。

编译器和汇编器生成可重定位目标文件(包括共享目标文件)。链接器生成可执行目标文件。

7.4 可重定位目标文件

7.5 符号和符号表

三种不同的符号:

由m定义并能被其他模块引用的全局符号。全局链接器符号对应于非静态的C函数以及被定义为不带C static 属性的全局变量

由其他模块定义并被模块m引用的全局符号。外部符号external

只被模块m定义和引用的本地符号。本地链接器符号对应于带static属性的C函数和全局变量。

7.6 符号解析

7.7 重定位

7.8 可执行目标文件

7.9 加载可执行目标文件

7.10 动态链接共享库

7.11 从应用程序中加载和链接共享库

7.12 与位置无关的代码(PIC)

7.13 处理目标文件的工具

7.14 小结

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: