链接-简介
来源:互联网 发布:java socket gui 实例 编辑:程序博客网 时间:2024/06/05 20:11
链接是将代码和数据合成一个文件的一个过程,生成的文件可以直接拷贝到存储器中并且执行。
链接可以在程序编译时,加载时,甚至运行时执行。
1.编译器的驱动程序
编译器系统中包含编译驱动程序,驱动程序主要包含:预处理器,编译器,汇编器和连接器。
处理过程如下:
预处理器 编译器 汇编器
main.c------------------>main.i----------------------->main.s------------------->main.o
swap.c------------------>swap.i----------------------->swap.s------------------->swap.o
链接器
swap.o +main.o ----------------->exe文件
2.目标文件
可重定位的目标文件 包含二进制代码和数据,比如main.o就是典型的可重定位目标文件
可执行的目标文件 包含二进制代码和数据,可拷贝到存储器或者直接执行,比如exe文件
共享目标文件 一种特殊的可重定位目标文件,加载或者运行时被动态加载到存储器并链接。
3.链接的作用
符号解析:符合解析就是把每个符合引用和一个符号定义联系起来。(最典型的是在一个cpp文件中定义的全局变量,在另外一个cpp文件使用)
重定位:
4.可重定位目标文件
.text :已编译的机器代码
.rodata 只读数据
.data: 已初始化的全局变量
.bss 未初始化的全局变量
.systab 符号表,用来存放程序中定义和引用的函数和全局变量的信息
.rel.text
.rel.data
5.符号和符号表
符号表中定义了main.o中定义和引用的符合的信息。有三种不同的符号:
a.由main.o中定义并能够被其他程序引用
b.只被模块main.o定义和引用的本地符号
c.由其他模块定义,并且被main.o中引用
本地变量和本地程序变量
本地变量一般是指全局变量,还有一些在函数中定义的static变量
本地程序变量一般是指函数中的临时变量,这些变量由栈来维护。
在函数中声明静态的变量,比如
int test()
{
static int x=0;(个人认为,这里的x就相当于是全局变量,只不过不能被其他函数访问)
return x;
}
在这里编译器会在.data节中为x分配一个空间
- 链接-简介
- 反向链接简介
- 反向链接简介
- 反向链接简介
- 动态链接库简介
- 反向链接简介
- 动态链接库简介
- GLIB 链接和简介
- linux链接库简介
- 动态链接库简介
- HTML链接简介
- 遗传编程简介链接
- HTML-链接简介
- 链接脚本简介
- 链接:NFC:简介
- 链接:USB:简介
- 编译、链接过程简介
- 硬链接和符号链接简介
- C++ 中的特殊关键字
- HDOJ 1863畅通工程(最小生成树kruskal算法并查集实现)
- Android system server之PackageManagerService详细分析
- tocat 4.1中 HttpProcessor线程安全问题
- thinkphp修改头像
- 链接-简介
- hdu Max Sum of Max-K-sub-sequence 单调队列优化DP
- javascript脚本history js常用技巧
- VMware View 5.0-1-环境准备篇
- [centos6.2] centos6.2系统全自动安装u盘的制作
- 第三章 同步 Windows程序设计 王艳平版
- Android system server之WindowManagerService按键消息传播流程
- 集成 Tomcat 插件到 Eclipse 的过程
- android:layout_gravity和android:gravity的区别