【linux浅谈013】GCC编译器使用与原理

本文详细介绍了GCC编译器处理C程序的过程,从预处理阶段展开宏定义和包含文件,到编译阶段转换为汇编代码,再到汇编器生成二进制目标文件,最后通过链接器整合成可执行程序。理解这一流程对于优化代码和排查问题至关重要。
摘要由CSDN通过智能技术生成

1.gcc编译器工作流程

我们以hello.c编译过程为例

1.1预处理阶段

指令

gcc-E hello.c -o hello.i  

预处理中会展开以#起始的行,试图解释为预处理指令(preprocessing directive) ,其中ISO C/C++要求支持的包括#if/#ifdef/#ifndef/#else/#elif/#endif(条件编译)、#define(宏定义)、#include(源文件包含)、#line(行控制)、#error(错误指令)、#pragma(和实现相关的杂注)以及单独的#(空指令)。
预处理器:cpp

1.2编译阶段

指令

gcc-S hello.i -o hello.s

编译器:gcc
将.s文件生成汇编语言

1.3汇编阶段

指令

gcc-c hello.s -o hello.o

汇编器:as
生成二进制代码

1.4链接器

指令

gcc hello.o -o [应用](默认a.out)

连接器:od
链接器把多个二进制的目标文件(object file)链接成一个单独的可执行文件。

1.5直接使用gcc

指令

gcc hello.s -o [应用](默认a.out)

gcc自动调用编译器汇编器连接器等

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值