程序的编译和链接过程
2017-09-13 15:35
211 查看
C语言的编译链接过程要把我们编写的一个c程序(源代码)转换成可以在硬件上运行的程序(可执行代码),需要进行编译和链接。编译就是把文本形式源代码翻译为机器语言形式的目标文件的过程。链接是把目标文件、操作系统的启动代码和用到的库文件进行组织形成最终生成可加载、可执行代码的过程。
将一个.c文件编译链接成.exe文件,需要以下几个步骤:预处理、编译、汇编、链接
预处理器:将.c 文件转化成 .i文件,使用的gcc命令是:gcc –E,对应于预处理命令cpp;
编译器:将.c/.h文件转换成.s文件,使用的gcc命令是:gcc –S,对应于编译命令 cc –S;
汇编器:将.s 文件转化成 .o文件,使用的gcc 命令是:gcc –c,对应于汇编命令是 as;
链接器:将.o文件转化成可执行程序,使用的gcc 命令是: gcc,对应于链接命令是 ld;
加载器:将可执行程序加载到内存并进行执行,loader和ld-linux.so。
预处理:主要是做一些代码文本的替换工作。(该替换是一个递归逐层展开的过程。)
(1)将所有的#define删除,并展开所有的宏定义
(2)处理所有的条件预编译指令,如:#if #ifdef #elif #else #endif
(3)处理#include预编译指令,将被包含的文件插进到该指令的位置,这个过程是递归的
(4)删除所有的注释//与/* */
(5)添加行号与文件名标识,以便产生调试用的行号信息以及编译错误或警告时能够显示行号
(6)保留所有的#pragma编译器指令,因为编译器需要使用它们
编译:把预处理完的文件进行一系列词法分析(lex)、语法分析(yacc)、语义分析及优化后生成汇编代码,这个过程是程序构建的核心部分。
汇编:汇编代码->机器指令。
链接:这里讲的链接,严格说应该叫静态链接。多个目标文件、库->最终的可执行文件(拼合的过程)。
将一个.c文件编译链接成.exe文件,需要以下几个步骤:预处理、编译、汇编、链接
预处理器:将.c 文件转化成 .i文件,使用的gcc命令是:gcc –E,对应于预处理命令cpp;
编译器:将.c/.h文件转换成.s文件,使用的gcc命令是:gcc –S,对应于编译命令 cc –S;
汇编器:将.s 文件转化成 .o文件,使用的gcc 命令是:gcc –c,对应于汇编命令是 as;
链接器:将.o文件转化成可执行程序,使用的gcc 命令是: gcc,对应于链接命令是 ld;
加载器:将可执行程序加载到内存并进行执行,loader和ld-linux.so。
预处理:主要是做一些代码文本的替换工作。(该替换是一个递归逐层展开的过程。)
(1)将所有的#define删除,并展开所有的宏定义
(2)处理所有的条件预编译指令,如:#if #ifdef #elif #else #endif
(3)处理#include预编译指令,将被包含的文件插进到该指令的位置,这个过程是递归的
(4)删除所有的注释//与/* */
(5)添加行号与文件名标识,以便产生调试用的行号信息以及编译错误或警告时能够显示行号
(6)保留所有的#pragma编译器指令,因为编译器需要使用它们
编译:把预处理完的文件进行一系列词法分析(lex)、语法分析(yacc)、语义分析及优化后生成汇编代码,这个过程是程序构建的核心部分。
汇编:汇编代码->机器指令。
链接:这里讲的链接,严格说应该叫静态链接。多个目标文件、库->最终的可执行文件(拼合的过程)。
相关文章推荐
- VC++程序编译链接的原理与过程(QQ dhms)
- 深度剖析一个典型的C/C++程序的编译、链接以及执行的过程
- C/C++——程序实现过程之编译、链接和执行
- EWARM IAR5.4编译链接过程, 程序运行阶段, ICF ilink配置文件
- 程序的编译与链接过程
- VC++程序的编译链接过程
- 【Symbian基础知识整理】_Symbian的目录结构和程序编译链接的简单过程
- 汇编语言自学习01_汇编程序实验工具及编译链接全过程
- 【编译原理】程序的编译链接执行过程
- 程序的预编译,编译,汇编,链接过程
- 程序的链接+编译过程
- Linux中c程序的编译链接过程2017/12/10
- c程序的编译和链接过程
- gcc程序的编译过程和链接原理
- Linux中c程序的编译链接过程2017/12/10
- 程序的编译和链接过程
- c++基础11:变量的命名约定 头文件的问题 程序的预处理编译链接过程
- 理解程序编译预处理与链接过程
- 程序的实现过程(编译、链接、执行)
- 程序的编译链接过程