`
kongweile
  • 浏览: 508362 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

gcc编译四个阶段步骤

 
阅读更多

#gcc hello.c

该命令将hello.c直接生成最终二进制可执行程序a.out

这条命令隐含执行了(1)预处理、(2)汇编、(3)编译并(4)链接形成最终的二进制可执行程序。这里未指定输出文件,默认输出为a.out。

从上面我们知道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文件。

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!

分享到:
评论

相关推荐

    GCC资料大全.chm

    他们都要用四个步骤中的一个或多个处理输入文件: 预处理(preprocessing),编译(compilation),汇编(assembly)和连接(linking).源文件后缀名标识源文件的 语言,但是对编译器来说,后缀名控制着缺省设定: gcc 认为...

    arm-linux-gcc.4.3.2.rar

    第四步:将arm-linux-gcc-4.3.2.bz2解压到/usr/local/arm目录下 sudo tar xvf arm-linux-gcc-4.3.2.bz2 -C /usr/local/arm 第五步:进入到 /usr/local/arm cd /usr/local/arm cd 4.3.2 cd bin pwd得到arm-linux-gcc...

    GCC使用手册

    他们都要用四个步骤中的一个或多个处理输入文件: 预处理(preprocessing),编译(compilation),汇编(assembly)和连接(linking).源文件后缀名标识源文件的 语言,但是对编译器来说,后缀名控制着缺省设定:

    GNU GCC 手冊.zip

    他们都要用四个步骤中的一个或多个处理输入文件: 预处理(preprocessing),编译(compilation),汇编(assembly)和连接(linking).源文件后缀名标识源文件的 语言,但是对编译器来说,后缀名控制着缺省设定: gcc 认为...

    编译原理(第2版)课件

    13.4.2 GCC编译程序的安装与配置 13.5 GCC的优化 13.5.1 概述 13.5.2 窥孔优化 13.5.3 基于机器描述的窥孔优化 13.5.4 修改GCC源程序的窥孔优化 练习 第14章 面向对象语言的编译 14.1 面向对象语言的基本概念 14.2 ...

    基于精简 C 语言的 C-MIPS 编译器(编译原理实验)【100012256】

    本实验为实现一个小型的 C 语言到 MIPS 汇编语言的编译器,需要完成以上所有步骤并验证测试正确。实验需要选择一个合适的 C 语言子集,能够体现 C 语言基本语法,特有关键字等,同时要能在这个子集的基础上写出具有...

    GNU GCC 中文手册

    C 和C++编译器是集成的.他们都要用四个步骤中的一个或多个处理输入文件: 预处理 (preprocessing),编译(compilation),汇编(assembly)和连接(linking).

    Phases-Of-compiler:这些存储库显示了带有用户界面的C程序的编译阶段

    C程序成为可执行文件的四个阶段如下: 1.预处理2.编译3.组装4.连结 进行解释 1.预处理这是编译过程的第一阶段,其中扩展了预处理程序指令(最常见的是宏文件和头文件)。 要执行此步骤,gcc在内部执行以下命令。 ...

    【TakeLionOS第三课】TakeLionOS汇编与C语言自学笔记-第二课.rar

    GCC编译时候,其实有四个步骤: 1、预处理:gcc -E hello.c -o hello.i 2、编译生成汇编语言:gcc -S hello.i -o hello.s 3、汇编:gcc -c hello.s -o hello.o 4、链接生成可执行文件:gcc hello.o -o hello 这时候...

    【TakeLionOS第四课】TakeLionOS汇编与C语言自学笔记-第三课.rar

    GCC编译时候,其实有四个步骤: 1、预处理:gcc -E hello.c -o hello.i 2、编译生成汇编语言:gcc -S hello.i -o hello.s 3、汇编:gcc -c hello.s -o hello.o 4、链接生成可执行文件:gcc hello.o -o hello 这时候...

    【TakeLionOS第五课】TakeLionOS汇编与C语言自学笔记-第四课.rar

    GCC编译时候,其实有四个步骤: 1、预处理:gcc -E hello.c -o hello.i 2、编译生成汇编语言:gcc -S hello.i -o hello.s 3、汇编:gcc -c hello.s -o hello.o 4、链接生成可执行文件:gcc hello.o -o hello 这时候...

    【TakeLionOS第六课】TakeLionOS汇编与C语言自学笔记-第五课.rar

    GCC编译时候,其实有四个步骤: 1、预处理:gcc -E hello.c -o hello.i 2、编译生成汇编语言:gcc -S hello.i -o hello.s 3、汇编:gcc -c hello.s -o hello.o 4、链接生成可执行文件:gcc hello.o -o hello 这时候...

    【TakeLionOS第七课】TakeLionOS汇编与C语言自学笔记-第六课.rar

    GCC编译时候,其实有四个步骤: 1、预处理:gcc -E hello.c -o hello.i 2、编译生成汇编语言:gcc -S hello.i -o hello.s 3、汇编:gcc -c hello.s -o hello.o 4、链接生成可执行文件:gcc hello.o -o hello 这时候...

    libjpeg.so.62.0.0.rar

    7、将/TARGETDIR/include/中(jconfig.h, jerror.h, jmorecfg.h, jpeglib.h)四个头文件拷贝到:/usr/local/arm/3.4.1/arm-linux/include中。 将/TARGETDIR/lib中(libjpeg.la, libjpeg.so, libjpeg.so.62, ...

    Linux实验七 GDB程序调试

    GDB是GNU开源组织发布的一个强大的linux下的程序调试工具,一般来说,GDB主要完成下面四个方面的功能: (1)、启动程序,可以按照用户自定义的要求运行程序。 (2)、可让被调试的程序在所指定的调置的断点处停住。...

    树莓派智能小车教程.pdf

    xxx是编译出来的执⾏⽂件,运⾏编译出来的程序是sudo ./xxx WIFI程序hjduino.c 编译指令 gcc hjduino.c -o hjduino -lwiringPi -lpthread 运⾏命令 sudo -/hjduino 2000 循迹程序xj.c 编译指令 gcc xj.c -o xj -...

    操作系统课设-进程互斥与调度

    一、实验目的 1、理解进程并发执行的实质。...6、输入gcc ./zhanghaohao1.c与gcc ./zhanghaohao2.c编译。 五、程序代码 1、用lockf()来给每一个进程加锁,以实现进程之间的互斥 互斥代码: 六、实验结果

    twidisplay:用于Akafugu 7段TWI显示的固件,Arduino库和AVR-GCC库

    要尝试使用Arduino板(例如Arduino UNO)进行显示,请按以下步骤钩住四根电线: SDA-针脚A4 SCL-针脚A5 地-地VCC-5V 连接完所有组件后,将Arduino的USB端口连接到计算机,在“工具”->“串行端口”菜单中选择

    LINUX系统移植及UBOOT代码分析.zip

    Linux系统移植 目 录 第一部分 前言....................................................................................................................................8 1 硬件环境.........................

    Linux下安装并使用Java开发opencv的配置

    花了四个小时,终于在linux下把eclipse下java开发opencv给搞定了…至于为什么花这么久的时间…且听我慢慢讲…  linux编译安装opencv  首先,linux下安装opencv其实不麻烦的,参考文档即可完成:...

Global site tag (gtag.js) - Google Analytics