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

本文总结了在Linux系统中C语言和C++程序的编译过程,包括预编译、编译、汇编和链接四个阶段。详细阐述了各阶段的作用,如预编译期的注释删除和头文件展开,编译期的语法和语义分析,汇编期的二进制转换,以及链接期的段合并和符号重定位。同时,介绍了与文件相关的命令和段的构造,通过代码实例解析了数据在不同段中的存储位置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

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

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

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

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

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

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

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

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

              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;
              }

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值