说明
c 说明
c++ 说明
gcc 说明
原文参考 http://www.gainstart.cn
本文主要介绍和记录gcc编译流程及原理。过多的概念和名词这里就不做解释。主要还是说明gcc的编译原理。
准备
hello world C代码编写
首先我们先准备 helloworld.c 源码文件,内容如下
#include<stdio.h>
int main(){
printf("hello world");
return 1;
}
gcc 简单使用
gcc helloworld.c
使用gcc helloworld.c
命令 默认在当前目录下生成 a.out
执行文件,这时我们可以使用命令 ./a.out
执行此文件
特别参数说明
指定生成 可执行文件名 gcc helloworld.c
-o
helloworld 使用-o
参数
打印提示信息 gcc-Wall
helloworld.c
打印编译详细信息 gcc-v
helloworld.c
解析 gcc 编译过程
gcc 编译过程分为 预处理(预处理文件.i)
-> 编译(汇编文件.s)
-> 汇编(目标文件.o)
-> 链接(可执行文件.exe | a.out)
。gcc 默认编译命令只会生成可执行文件,如果要生成中间文件 可以加
-save-temps
生成。如:gcc -save-temps helloworld.c -o helloworld 结果如图所示:接下来我们分别对这些文件加以说明
预处理
gcc首先会做预处理,并生成预处理文件,文件后缀名为 .i
。
以下列出预处理会做的事情(当然预处理做的事不止这些)。
- 头文件展开 (不检查语法错误)
- 宏定义替换 (只做简单替换)
- 替换注释 (空行代替注释)
- 展开条件编译
使用-E
可以生成预处理文件,如下
gcc -E helloworld.c -o helloworld.i
编译
编译是把预处理文件编译成汇编语言,文件后缀名为.s
。
使用-S
生成汇编文件,如下
gcc -S helloworld.i -o helloworld.s
汇编内容如图
汇编
汇编过程是将汇编文件编译成二进制文件,文件后缀为.o
使用-c
可以生成二进制文件,如下:
gcc -c helloworld.s -o helloworld.o
链接
链接过程是将二进制文件链接成可执行文件。
编译时不用加任何参数,如下:
gcc helloworld.o -o helloworld