码迷,mamicode.com
首页 > 其他好文 > 详细

gcc的四个编译过程

时间:2014-09-04 19:11:00      阅读:203      评论:0      收藏:0      [点我收藏+]

标签:gcc   编译   gcc编译过程   

一、我们在Linux下先编写一个HelloWorld程序,用来供GCC编译时使用

#include <stdio.h>

int main()
{
	printf("Hello World");
	return 0;
}

我们可以直接使用gcc -o helloWorld helloWorld.c 来把源文件.c编译成可执行文件helloWorld。

但是,其实gcc编译的这个过程可分为4步,具体如下:


二、GCC的命令剖析--四步走

从上面我们知道GCC编译源代码生成最终可执行的二进制程序,GCC后台隐含执行了四个阶段步骤。


GCC编译C源码有四个步骤:预处理-----> 编译 ----> 汇编 ----> 链接


现在我们就用GCC的命令选项来逐个剖析GCC过程。
1)预处理(Pre-processing)
在该阶段,编译器将C源代码中的包含的头文件如stdio.h编译进来,用户可以使用gcc的选项”-E”进行查看。
用法:#
gcc -E hello.c -o hello.i
作用:将hello.c预处理输出hello.i文件。
[root]# gcc -E hello.c -o hello.i
[root]# ls
hello.c hello.i



2)编译阶段(Compiling)
第二步进行的是编译阶段,在这个阶段中,Gcc首先要检查代码的规范性、是否有语法错误等,以确定代码的实际要做的工作,在检查无误后,Gcc把代码翻译成汇编语言。用户可以使用”-S”选项来进行查看,该选项只进行编译而不进行汇编,生成汇编代码。
选项 -S
用法:[root]# gcc –S hello.i –o hello.s
作用:将预处理输出文件hello.i汇编成hello.s文件。
[root@richard hello-gcc]# ls
hello.c hello.i hello.s



3)汇编阶段(Assembling)
汇编阶段是把编译阶段生成的”.s”文件转成二进制目标代码.
选项 -c
用法:[root]# gcc –c hello.s –o hello.o
作用:将汇编输出文件test.s编译输出test.o文件。
[root]# gcc -c hello.s -o hello.o
[root]# ls

hello.c hello.i hello.o hello.s


4)链接阶段(Link)
在成功编译之后,就进入了链接阶段。
无选项链接
用法:[root]# gcc hello.o –o hello.exe
作用:将编译输出文件hello.o链接成最终可执行文件hello.exe。
[root]# ls
hello.c hello.exe hello.i hello.o hello.s 

运行该可执行文件,出现正确的结果如下。


[root@localhost Gcc]# ./hello

Hello World!





本文由Cout_Sev 亲自撰写。

部分资料摘自网络,若有错误欢迎指正

转载请注明出处:http://blog.csdn.net/cout_sev/

谢谢合作!


gcc的四个编译过程

标签:gcc   编译   gcc编译过程   

原文地址:http://blog.csdn.net/cout_sev/article/details/39055447

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!