使用Eclipse CDT开发C语言程序,虽然使用很方便,效率也很高,但是它向我们隐藏了很多细节。虽然大多数时候这并不影响我们的开发,但是当我们需要对程序的编译链接过程进行更加特殊的控制,以获得可以满足特殊要求(例如,对程序进行优化、附带调试信息等)的程序的时候,就需要直接调用编译器程序进行编译链接,从而可以使用编译器所提供的丰富的编译选项,以达到对编译器的行为进行灵活控制,得到我们想要的个性化的可执行程序的目的。

我们通常所说的GCC编译器,是GUN Compiler Collection的简称。GCC原本只能编译C语言程序。但是,当C++流行起来后,GCC很快地被扩展,变得可编译C++程序。之后,GCC更是被进一步扩展,变得可支持Fortran、Objective-C以及Java等主流开发语言的编译。从GCC的应用来看,它是Linux/UNIX平台下最常用的编译器程序。同时,在Linux/UNIX平台下的嵌入式开发领域,GCC也是用得最普遍的一种编译器。除了Linux/UNIX操作系统之外,GCC还能运行在其他不同的操作系统上,如Solaris、Windows(需要自己安装Cygwin或者是MinGW)、Mac OS X操作系统等。正是GCC编译器应用的广泛性,使其成为C以及C++编译器的事实上的标准。

GCC的使用方法跟谭老师所介绍的Visual C++的编译器的使用方法非常相似,它的调用方式如下:

gcc [编译选项] [文件名]

其中,gcc是GCC的C语言编译命令,其后的编译选项,是用于控制编译器的编译行为的。GCC常用的编译选项有:

-c

"-c"选项表示只编译,不链接成为可执行文件,编译器只是将输入的.cpp等源代码文件生成.o为后缀的目标文件,通常用于编译不包含主函数的子程序文件。

-o

"-o 输出文件名",这个选项用于指定输出的可执行文件的名称,如果不给出这个选项,GCC 就给出预设的可执行文件。在Linux系统上,这个默认的输出文件名为a.out,相应的,在Windows系统上这个默认的文件名就是a.exe。

-g

使用"-g"编译选项将会产生调试工具(例如,GNU的GDB)所必需的符号信息,要想对源代码进行调试,我们就必须加入这个编译选项。

-O

"-O"选项表示编译器将对程序进行优化编译、链接,采用这个选项,整个源代码会在编译、链接过程中进行优化处理,这样产生的可执行文件的体积可能减小,执行效率也可能提高,但是,编译、链接的速度就相应地要慢一些。

-I

"-I 目录名"可以指定GCC的附加头文件目录,我们在使用第三方提供的程序库的时候常常会用到这个选项,用于将程序库的include目录添加为程序的附加头文件目录。

实际上,GCC所提供的编译选项可能有数百个之多,我们只需要了解以上这些常用的编译选项就可以了。到真正需要的时候,可以查阅相应的参考手册。

在了解了GCC的基本使用方法之后,利用GCC,我们同样可以以命令行的方式来编译链接C语言程序。例如,我们可以以下面的命令将上面小节中的例子源程序编译成一个可执行程序。

gcc -g -O max.c -o max

通过这样一个简单的命令,我们就将max.c这个C语言源文件编译并优化成了一个可执行文件max,在编译的过程中,还生成了相应的调试信息。通过这样的方式,我们对C语言程序的编译链接过程进行了自定义。

虽然以命令行的方式使用GCC编译链接C语言程序,可以对编译链接过程进行很好的控制,但是每次编译都需要输入这些常用的编译命令,无疑是一件烦人的事情。程序员就是为了解决麻烦而存在的,怎么能够被麻烦所困扰呢。为了解决这个问题,我们通常将一些文本编辑器(例如vim或者EditPlus)配置成可以直接调用GCC命令,这样,在文本编辑器中编辑好源文件之后,就可以直接调用它的自定义命令来编译链接源文件,得到最终的可执行程序。如果是一些比较大型的项目,有多个源文件,我们则常常使用更加强大的make构建工具,在一个Make File中定义好各个源文件的编译链接规则,然后使用make命令来编译链接整个项目。

开发工具拼图

利用GCC,GDB、make工具以及文本编辑器,我们完全可以打造一个高度自定义的,完全适合自己开发习惯的C语言开发环境,真的是做到了"我的地盘我作主"。

怎样用gcc编译c语言,使用GCC编译C语言程序相关推荐

  1. Linux GCC简明教程(使用GCC编译C语言程序)

    文章目录 Gedit 编辑器 GCC 编译器 1) 生成可执行程序 2) 运行可执行程序 完整的演示 分步骤编译 1) 编译(Compile) 2) 链接(Link) 市面上常见的 Linux 都是发 ...

  2. 【C语言】GCC编译过程详述

    目录 一.说明 二.GCC语法和参数 2.1 GCC语法 2.2 参数 2.3 C程序中的头文件包含两种情况∶ 三.基本规则 四.更多的常用选项 4.1 编译的时候 4.2 预处理选项 4.3 警告选 ...

  3. vs编译器 printf 控制台输出_【语言教程】通过语言了解GCC编译器工作过程

    通过c语言了解GCC编译器如何工作的 比特 下面是c语言初学必看的打印helloworld #include int main(){ printf("hello, world\n" ...

  4. C 语言编程 — GCC 工具链

    目录 文章目录 目录 文章目录 GCC 工具链 GCC 编译器 GCC 的常用指令选项 GCC 所遵循的部分约定规则 Binutils C 运行时库 Clang 和 LLVM 文章目录 <C 语 ...

  5. gcc/g++等编译器 编译原理: 预处理,编译,汇编,链接各步骤详解

    例子:由多个源文件组成的C程序,经过编辑.预处理.编译.链接等阶段才能生成最终的可执行程序.此过程中,在__c__阶段可以发现被调用的函数未定义. A. 编辑和预处理 B. 预处理 C. 编译 D. ...

  6. GCC编译器简明教程(Linux下C语言开发环境的搭建)

    GCC编译器简明教程(Linux下C语言开发环境的搭建) 市面上常见的Linux都是发行版本,典型的Linux发行版包含了Linux内核.桌面环境(例如GNOME.KDE.Unity等)和各种常用的必 ...

  7. c语言gcc运行命令,c语言在gcc中怎么运行程序?

    c语言在gcc运行程序的方法:1.将需要运行的代码保存在一个叫"cards.c"的文件中:2.命令提示符中输入"gcc cards.c -o cards"命令, ...

  8. C 语言编译器 gcc 命令详解

    Linux 系统中最重要的软件开发工具是 gcc,在 Linux 系统中,c89.cc 和 gcc 这些命令基本上都指向系统的C语言编译器,通常是GNU C编译器,或都简称 gcc.在 UNIX 系统 ...

  9. Linux GCC简明教程(使用GCC编写C语言程序)

    市面上常见的 Linux 都是发行版本,典型的 Linux 发行版包含了 Linux 内核.桌面环境(例如 GNOME.KDE.Unity 等)和各种常用的必备工具(例如 Shell.GCC.VIM. ...

最新文章

  1. python恶搞代码-搞笑的程序猿:看看你是哪种Python程序员
  2. Linux下Sniffer程序的实现
  3. c++ 形参用指针 还是对象_C语言:聚会上,我发现只有我没有对象!
  4. 简述控制反转ioc_深度理解Spring IOC(控制反转)
  5. 拾取模型的原理及其在THREE.JS中的代码实现
  6. Linux基本操作【作业】
  7. 怎么在linux编辑程序后编译,在linux里,c程序的编辑、编译、调试的详细步骤是什么?...
  8. 理解_RBAC基础概念_Spring Security OAuth2.0认证授权---springcloud工作笔记113
  9. 【Flutter】微信项目实战【04】发现界面搭建
  10. Weex + Ui - Weex Conf 2018
  11. c++计算字符串中浮点数
  12. Atiitt 图像处理的常见功能业务用途与类库与功能实现 目录 1. 常见业务场景 3 1.1. 缩略图 蒙版遮罩挖空 3 1.2. 区域裁剪,水印,旋转 3 1.3. 判断图像大小分辨率要求
  13. 大数据Hadoop相关概念及其技术生态圈
  14. c语言 库仑计_android电池(四):电池 电量计(MAX17040)驱动分析篇
  15. 学习、使用Echar
  16. uml通信图画法_UML9种图的画法
  17. wmp流代理服务器设置为空,03服务器安装wmp10的方法
  18. Ubuntu出现System policy prevents modification of network settings for all users该怎么解决
  19. 2016年上半年信息系统监理师考试感想
  20. PHP+python+nodejs+ springboot+vue 社区互助平台

热门文章

  1. 金山烈火工作室并入西山居 五大产品关停并转
  2. jms 消息服务器,JMS 消息服务配置
  3. centos 安装contained,contained的使用
  4. Android弹幕实现:基于B站弹幕开源系统(3)-文本弹幕的完善和细节调整
  5. 服务器磁盘IO性能调优
  6. mysql+不确定的列转行_mysql列转行(列值不确定
  7. [转]宁做创业狼,不做打工狗
  8. 微信小应用详细开发教程
  9. Android - 投屏工具 scrcpy
  10. journalctl命令使用简介