来自: 51CTO  GCC使用入门

通常所说的GCC是GUN Compiler Collection的简称,除了编译程序之外,它还含其他相关工具,所以它能把易于人类使用的高级语言编写的源代码构建成计算机能够直接执行的二进制代码。GCC是Linux平台下最常用的编译程序,它是Linux平台编译器的事实标准。同时,在Linux平台下的嵌入式开发领域,GCC也是用得最普遍的一种编译器。GCC之所以被广泛采用,是因为它能支持各种不同的目标体系结构。例如,它既支持基于宿主的开发(简单讲就是要为某平台编译程序,就在该平台上编译),也支持交叉编译(即在A平台上编译的程序是供平台B使用的)。目前,GCC支持的体系结构有四十余种,常见的有X86系列、Arm、PowerPC等。同时,GCC还能运行在不同的操作系统上,如Linux、Solaris、Windows等。

·详解GCC的下载和安装

·Linux编程起步 GCC基本用法

除了上面讲的之外,GCC除了支持C语言外,还支持多种其他语言,例如C++、Ada、Java、Objective-C、FORTRAN、Pascal等。

本系列文章中,我们不仅介绍GCC的基本功能,还涉及到一些诸如优化之类的高级功能。另外,我们还考察GCC的一些映像操作工具,如size和objcopy等,这将在后续的文章中加以介绍。

二、程序的编译过程

对于GUN编译器来说,程序的编译要经历预处理、编译、汇编、连接四个阶段,如下图所示:

从功能上分,预处理、编译、汇编是三个不同的阶段,但GCC的实际操作上,它可以把这三个步骤合并为一个步骤来执行。下面我们以C语言为例来谈一下不同阶段的输入和输出情况。

在预处理阶段,输入的是C语言的源文件,通常为*.c。它们通常带有.h之类头文件的包含文件。这个阶段主要处理源文件中的#ifdef、 #include和#define命令。该阶段会生成一个中间文件*.i,但实际工作中通常不用专门生成这种文件,因为基本上用不到;若非要生成这种文件不可,可以利用下面的示例命令:

gcc -E test.c -o test.i

在编译阶段,输入的是中间文件*.i,编译后生成汇编语言文件*.s 。这个阶段对应的GCC命令如下所示:

GCC -S test.i -o test.s

在汇编阶段,将输入的汇编文件*.s转换成机器语言*.o。这个阶段对应的GCC命令如下所示:

GCC -c test.s -o test.o

最后,在连接阶段将输入的机器代码文件*.s(与其它的机器代码文件和库文件)汇集成一个可执行的二进制代码文件。这一步骤,可以利用下面的示例命令完成:

GCC test.o -o test

上面介绍了GCC编译过程的四个阶段以及相应的命令。下面我们进一步介绍常用的GCC的模式。

三、GCC常用模式

这里介绍GCC追常用的两种模式:编译模式和编译连接模式。下面以一个例子来说明各种模式的使用方法。为简单起见,假设我们全部的源代码都在一个文件test.c中,要想把这个源文件直接编译成可执行程序,可以使用以下命令:

$ GCC -o test

这里test.c是源文件,生成的可执行代码存放在一个名为test 的文件中(该文件是机器代码并且可执行)。-o 是生成可执行文件的输出选项。如果我们只想让源文件生成目标文件(给文件虽然也是机器代码但不可执行),可以使用标记-c ,详细命令如下所示:

$ GCC -c test.c

默认情况下,生成的目标文件被命名为test.o,但我们也可以为输出文件指定名称,如下所示:

$ GCC -c test.c -o

上面这条命令将编译后的目标文件命名为mytest.o,而不是默认的test.o。

迄今为止,我们谈论的程序仅涉及到一个源文件;现实中,一个程序的源代码通常包含在多个源文件之中,这该怎么办?没关系,即使这样,用GCC处理起来也并不复杂,见下例:

$ GCC -o test first.c second.c third.c

该命令将同时编译三个源文件,即first.c、second.c和 third.c,然后将它们连接成一个可执行程序,名为test。

c语言开发工具程序代码是什么文件,【C语言】开发工具--GCC使用入门相关推荐

  1. c语言日期计算器程序代码,旧计算器(C语言代码)

    #### 原题链接:[题目486 - ACM在线评测系统](http://nyoj.top/problem/486 "nyoj在线评测") #### 原题内容: **题目描述:** ...

  2. c语言编写加法程序代码,矩阵加法 (C语言代码)

    解题思路: 注意事项:输出数与数之间只有一个空格. 参考代码: #include void main() { int a,b,c,d,e; int ask1[100][100]={0}; int as ...

  3. c语言常用的代码,初学C语言常用简单程序代码;

    <初学C语言常用简单程序代码;>由会员分享,可在线阅读,更多相关<初学C语言常用简单程序代码;(16页珍藏版)>请在人人文库网上搜索. 1.初学C语言常用简单程序代码素数的筛选 ...

  4. 微信开发者工具开发小程序代码自动热加载/重载/部署

    前言 微信小程序基础库 2.12.2 默认情况下,使用微信开发者工具开发小程序时,每次保存代码都会重启微信小程序,即每次都模拟器都返回到首页.有没有办法既更新模拟器中的小程序,又保持 在当前页呢?有的 ...

  5. c语言小程序作业,c语言小程序(c语言简单小程序代码)

    所以特此求经典C语言小程序.谢谢大家的关注!!! #include #include void function(int n){ int i,j,k,x=0; for(i=1;i<=n;i++) ...

  6. 完整简单c语言程序代码,一些简单的C语言程序代码.docx

    一些简单的C语言程序代码 由键盘任意输入1个4位数整数,分别输出其中的个位.十位.百位.千位./* expe 3-10 */#include #include void main(void){ int ...

  7. 如何添加行号 c语言,如何为程序代码加上行号

    若需要将程序代码放进词交报告或做文件时,或许我们会想将程序代码加上行号方便讲解,如同博客园显示程序代码那样,我们该如何做呢? 介绍 使用环境:Visual C++ 9.0/视觉演播室2008年 一段C ...

  8. 代码片段管理工具_VS代码片段:提高编码效率的最强大工具

    代码片段管理工具 by Sam Williams 通过山姆·威廉姆斯 VS代码片段:提高编码效率的最强大工具 (VS Code snippets: the most powerful tool to ...

  9. C语言贪吃蛇游戏代码,贪吃蛇C语言代码实现大全

    一.C语言贪吃蛇代码实现前言 设计贪吃蛇游戏的主要目的是让大家夯实C语言基础,训练编程思维,培养解决问题的思路,领略多姿多彩的C语言. 贪吃蛇是非常经典的一款游戏,本次我们模拟在控制台实现贪吃蛇游戏, ...

最新文章

  1. VSFTP之不能登录
  2. jquery+javascript触发a标签的点击事件
  3. SAP CRM Fiori My task应用里roundtrip取舍的讨论
  4. python压缩文件不带根路径_python 压缩文件(解决压缩路径问题)
  5. Tomcat 内存调大
  6. 前端笔记-thymeleaf获取及回显input标签type=date
  7. 联想y50更换固态硬盘_旧笔记本电脑更换固态硬盘
  8. Linux命令之---cat
  9. SqlServer使用表值函数汇总
  10. STL源码剖析 第5章 关联式容器
  11. 电脑编程就业找哪方面
  12. 10、共射放大电路的设计
  13. c语言 一维薛定谔方程,基于MATLAB快速傅里叶非线性薛定谔方程.ppt
  14. k8s 的容器command用法相关
  15. linux运行luminati,安装luminati的nodejs环境配置
  16. 判断Stack为空的方法之empty()与isEmpty()
  17. 文件和文件夹操作——文件操作实列
  18. MySQL默认字符集设置
  19. 基于AdaBoost的人脸检测
  20. H.266/VVC的编码结构和块划分

热门文章

  1. Java Mission Control 5.2终于来了! 欢迎7u40!
  2. JSF简单Ajax示例
  3. Windows上的Java线程CPU分析
  4. Tomcat 7上具有RESTeasy JAX-RS的RESTful Web服务-Eclipse和Maven项目
  5. 判断字符串是不是application/x-www-form-urlencoded字符串(URL编码格式的字符串)
  6. 解决阿里云 ssh 远程连接短时间没操作就会断掉的问题
  7. linux系统下安装jdk教程
  8. HH SaaS电商系统的销售订单付款后生成采购单和出库单的时序图
  9. 树莓派python交互界面实例_玩转树莓派-RaspBerry,使用Python开发定制界面
  10. 背景区域为负样本什么意思_词向量-skipgram与负采样