Linux下C语言、C++的编译过程

经过前一段时间的学习,我了解了在Linux条件下C语言和C++程序的编译过程以及所涉及到的编译使用命令,今天我就来总结一下这些内容。

首先我们来了解一下在x86条件下一个文件的编译过程:

Linux下C语言、C++的编译过程_第1张图片

预编译期的作用:(1)删除注释;(2)处理预处理指令;(3)将包含的头文件展开。   编译期的作用:(1)语法分析;(2)语义分析;(3)汇总符号。   汇编期的作用:(1)将汇编指令翻译成二进制文件;(2)生成符号表。

下面我们再来了解一下在Linux条件下编译期所使用的一些编译命令:

编译期所做的工作是代码优化。汇编期所做的工作是将代码生成各种段。链接期所做的工作是:(1)合并各个段;(2)调整段的起始位置;(3)合并符号表,并进行符号分析(只会解析global,不会解析local);(4)进行符号重定位工作。

这里有部分与文件信息有关的命令:

一般数据和指令都会生成各种段存放在二进制目标文件中,在Linux条件下编译源代码和链接会产生一个默认执行文件,文件名为a.out,我们来看一下main.o文件以及a.out文件的主要构造:

Linux下C语言、C++的编译过程_第2张图片Linux下C语言、C++的编译过程_第3张图片

我们来了解一下文件编译过程中生成的主要段以及段中所存储的内容:

Linux下C语言、C++的编译过程_第4张图片

下面我们通过一段代码帮助我们更好的理解数据的存放位置:

              int data1=0;
              int data2=1;
              int data3;
              static int data4=0;
              static int data5=2;
              static int data6;

              int main()
             {
                    int a=0;
                    int b=3;
                    int c;
                    static int d=0;
                    static int e=4;
                    static int f;

                    return 0;
              }

Linux下C语言、C++的编译过程_第5张图片

    今天就总结这么多,有什么不对的地方还请各位指点一下。

你可能感兴趣的:(linux基础知识总结)