gcc编译过程分解

gcc封装了程序的整个编译过程,包括 预编译/编译/汇编。

预编译:把c文件#开头的宏定义展开,处理后得到i后缀文件,如hello.i,这个文件就不会再有#define,#ifdef之类的宏。对应的gcc参数是-E,表示执行完预编译就结束。cpp的文件会被展开为hello.ii。

例子:

gcc -E hello.c -o hello.i

编译:把展开后的文件转化为汇编语言,这里有严格的语法/文法要求,是最高深的部分,要学汇编原理才能搞懂。得到hello.s文件。对应的gcc参数为-S,表示执行完编译就结束。

例子

gcc -S hello.i -o hello.s 或者 gcc -S hello.c -o hello.s

其实-S调用了/usr/lib/gcc/x86.../4.4/cc1这个程序。-S会根据不同的语言,来调用不同的编译工具。可见,实际执行汇编的不是gcc本身。

汇编:把汇编语言变为机器代码。对应gcc参数为-c,表示执行完所有编译流程。

例子

gcc -c hello.c -o hello.o


三者的参数不用死记,忘记了就man gcc看一下就行了


GCC(1)                                                     GNU                                                     GCC(1)

NAME
       gcc - GNU project C and C++ compiler

SYNOPSIS
       gcc [-c|-S|-E] [-std=standard]
           [-g] [-pg] [-Olevel]
           [-Wwarn...] [-pedantic]
           [-Idir...] [-Ldir...]
           [-Dmacro[=defn]...] [-Umacro]
           [-foption...] [-mmachine-option...]
           [-o outfile] [@file] infile...

第一行就是输入参数,最后一行就是输出参数-o

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值