编译链接过程(三)
来源:互联网 发布:好书推荐知乎 编辑:程序博客网 时间:2024/05/14 14:25
经过前两篇博文可以大体了解到源程序是如何变成目标文件的。但是目标文件并不是可执行文件,它们之间还是有些差别,虽然在文件的格式上非常相似,都是ELF(Linux)或PE(Widows)文件格式,具体这两种格式之间的联系与区别后面再做了解。每一个源文件如×××.c或者×××.cpp称为一个编译单元,它们将生成一个对应的目标文件×××.o。多个目标文件和这个可执行文件可能调用到的共享库文件(×××.so)一起经过链接过程,生成可执行文件。
这里就表明了链接的意义了。随着软件规模的不断扩大,将所有代码都写在一个文件里,就会使得程序非常符,不利于维护,也不容易保证程序的正确性。解决的方法是将程序划分成功能相关的模块,每个模块可以写在一个源文件中,模块之间的通信机制是通过全局变量或者函数调用来完成的。那么在编译某个文件时(编译对应的模块),此文件要访问的全局变量的地址未知,汇编代码该如何确定呢?变量和函数都被指定了符号,将这些在编译时无法确定地址的符号归总,放到一起(重定位表),待它们所定义的模块编译完成之后(变量和函数的地址确定),再重新计算,然后后写回到各模块中。这一过程就是链接。这需要目标文件的格式做好合理的安排,链接时到指定的地方去寻找哪些符号要重定位以及它们的地址要被写入到哪个位置。
0 0
- 编译链接过程(三)
- 编译链接过程(一)
- 编译链接过程(二)
- C++编译与链接(1)-编译与链接过程
- 编译、链接学习笔记(一)简述编译链接过程
- C++编译链接、过程
- c++编译链接过程
- C++编译链接过程
- c编译链接过程
- C++编译链接过程
- C++编译链接过程
- C++编译、链接过程
- 静态链接,编译过程
- C++编译链接过程
- C++编译、链接过程
- uboot编译链接过程
- C++编译链接过程
- c++编译链接过程
- 【Android】进程与线程基本知识
- sun7i-a20-cubietruck.dts
- 新锦江开户134-2777-9966
- 果博东方开户13427779966
- Android获取cpu使用率,剩余内存和硬盘容量
- 编译链接过程(三)
- c++ string 类
- UVA10791 - Minimum Sum LCM(分解质因子)
- 正是进击Linux-鸟哥的私房菜
- HDOJ 5094: Maze
- windows 控制台程序 响应 Ctrl+C
- owncloud 搭建
- 模板类使用成员函数模板(member function template)处理隐式(implicit)转换
- Android之 MTP框架和流程分析 (1)