从.c或.cpp文件到可执行文经历的步骤

1. 预处理:(C:.i文件 C++:.ii文件)

         i. 宏定义指令,如#define、#undef等,前者用作替换,后者用作取消对某个宏的定义,使以后该串的出现不再被替换。

        ii.条件编译指令,如#ifdef、#ifndef、#else、#elif、#endif等;

       iii.头文件包含指令,如#include<iostream>,#include<vector>等;

       iv.特殊符号

2. 编译:(.o编译后的目标文件)

预编译程序所要做的工作是通过词法分析和语法分析,在确认所有的指令都符合语法规则之后,将其翻译成等价的中间代码表示或汇编代码。

3. 优化(但不是主要的)

4. 汇编:(. s是汇编语言源代码文件   .S是经过预编译的汇编语言源代码文件)

汇编过程把汇编语言代码翻译成目标机器指令的过程。对被翻译系统处理的每一个.c或.cpp文件,都将经过这一处理而得到相应的目标文件。

目标文件由段组成,通常一众目标文件中至烽有两个段:

代码段 该段中所包含的主要是程序的指令。可读、可执行,但一般不可写。

数据段 主要存放程序中要用到的各种全局变量或静态的数据。可读、可写、可执行。

5. 链接:(.out)

链接程序的主要工作是将有关的目标文件彼此相连接,也即将在一个文件中引用的符号同该符号在另外一个文件中的定义连接起来,使得所有的这些目标文件成为一个能够被操作系统装入执行的统一整体。

上述知识来源于网络平台,点滴积累,如有雷同,纯属巧合!

猜你喜欢

转载自blog.csdn.net/tt_love9527/article/details/80858535
今日推荐