GCC(GNU CompilerCollection,GNU编译器套装),是由 GNU 开发的编程语言编译器。它是以GPL许可证所发行的自由软件,也是 GNU计划的关键部分。GCC原本作为GNU操作系统的官方编译器,现已被大多数类Unix操作系统采纳为标准的编译器,GCC同样适用于微软的Windows。GCC是自由软件过程发展中的著名例子,由自由软件基金会以GPL协议发布。GCC是Linux平台下最常用的编译程序,是Linux平台编译器的事实标准。

程序的编译过程

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

aaarticlea/png;base64,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" alt="" />

从功能上分,预处理、编译、汇编是三个不同的阶段,但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追常用的两种模式:编译模式和编译连接模式。下面以一个例子来说明各种模式的使用方法。为简单起见,假设我们全部的源代码都在一个文件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。

需要注意的是,要生成可执行程序时,一个程序无论有有一个源文件还是多个源文件,所有被编译和连接的源文件中必须有且仅有一个main函数,因为main函数是该程序的入口点(换句话说,当系统调用该程序时,首先将控制权授予程序的main函数)。但如果仅仅是把源文件编译成目标文件的时候,因为不会进行连接,所以main函数不是必需的。

gcc所遵循的部分约定规则:

.c为后缀的文件,C语言源代码文件;

.a为后缀的文件,是由目标文件构成的档案库文件;

.C,.cc或.cxx 为后缀的文件,是C++源代码文件且必须要经过预处理;

.h为后缀的文件,是程序所包含的头文件;

.i 为后缀的文件,是C源代码文件且不应该对其执行预处理;

.ii为后缀的文件,是C++源代码文件且不应该对其执行预处理;

.m为后缀的文件,是Objective-C源代码文件;

.o为后缀的文件,是编译后的目标文件;

.s为后缀的文件,是汇编语言源代码文件;

.S为后缀的文件,是经过预编译的汇编语言源代码文件。

常用选项

许多情况下,头文件和源文件会单独存放在不同的目录中。例如,假设存放源文件的子目录名为./src,而包含文件则放在层次的其他目录下,如./inc。当我们在./src 目录下进行编译工作时,如何告诉GCC到哪里找头文件呢?方法如下:

$ gcc test.c –I../inc -o test

上面的命令告诉GCC包含文件存放在./inc 目录下,在当前目录的上一级。如果在编译时需要的包含文件存放在多个目录下,可以使用多个-I 来指定各个目录:

$ gcc test.c –I../inc –I../../inc2 -o test

这里指出了另一个包含子目录inc2,较之前目录它还要在再上两级才能找到。

另外,我们还可以在编译命令行中定义符号常量。为此,我们可以简单的在命令行中使用-D选项即可,如下例所示:

$ gcc -DTEST_CONFIGURATION test.c -o test

上面的命令与在源文件中加入下列命令是等效的:

#define TEST_CONFIGURATION

在编译命令行中定义符号常量的好处是,不必修改源文件就能改变由符号常量控制的行为。

在使用Gcc编译器的时候,我们必须给出一系列必要的调用参数和文件名称。GCC编译器的调用参数大约有100多个,其中多数参数我们可能根本就用不到,这里只介绍其中最基本、最常用的参数。

GCC最基本的用法是∶gcc [options][filenames]

其中options就是编译器所需要的参数,filenames给出相关的文件名称。

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

-o output_filename,确定输出文件的名称为output_filename,同时这个名称不能和源文件同名。如果不给出这个选项,gcc就给出预设的可执行文件a.out。

-g,产生符号调试工具(GNU的gdb)所必要的符号资讯,要想对源代码进行调试,我们就必须加入这个选项。

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

-O2,比-O更好的优化编译、链接,当然整个编译、链接过程会更慢。

-Idirname,将dirname所指出的目录加入到程序头文件目录列表中,是在预编译过程中使用的参数。C程序中的头文件包含两种情况∶

#include <myinc.h>
#include “myinc.h”

其中,A类使用尖括号(< >),B类使用双引号(“”)。对于A类,预处理程序cpp在系统预设包含文件目录(如/usr/include)中搜寻相应的文件,而B类,预处理程序在目标文件的文件夹内搜索相应文件。

警告功能

当GCC在编译过程中检查出错误的话,它就会中止编译;但检测到警告时却能继续编译生成可执行程序,因为警告只是针对程序结构的诊断信息,它不能说明程序一定有错误,而是存在风险,或者可能存在错误。虽然GCC提供了非常丰富的警告,但前提是你已经启用了它们,否则它不会报告这些检测到的警告。

在众多的警告选项之中,最常用的就是-Wall选项。该选项能发现程序中一系列的常见错误警告,该选项用法举例如下:

$ gcc -Wall test.c -o test

C语言的本质(33)——GCC编译器入门的更多相关文章

  1. GCC编译器入门[转载]

    GCC编译器(GNU C Compiler)是GNU组织的一款开源 编译器,它是Linux环境下的默认C语言编译器.它处理能够高效的编译C语言以外,还可以编译其他语言.并且,现在的GCC已经不光包括编 ...

  2. GCC编译器入门

    GCC(GNU Compiler Collection,GNU编译器套件),是由 GNU 开发的编程语言编译器.它是以GPL许可证所发行的自由软件,也是 GNU计划的关键部分.GCC原本作为GNU操作 ...

  3. GCC编译器基础入门

    导语 GCC(GNU Compiler Collection,GNU 编译器套件) 是由 GNU 开发的编程语言编译器,支持C.C++.Objective-C.Fortran.Java.Ada和Go语 ...

  4. C语言的编译过程、安装gcc编译器以及设置环境变量

    以我对C语言编译过程的了解,我用了一点时间画了一个图,提供给大家参考一下,希望有些能对您的问题提上帮助. 前几天刚初步学习了C语言的编译过程,感触挺深的.在C语言中头文件其实起了一个很大的作用. 1. ...

  5. Lambda表达式(C语言-gcc编译器)

    前言 先来啰嗦几句,身边的朋友,同事都喜欢在博客上记录自己在学习计算机编程技术路程上的一些问题和心得.就我个人而言,这是个好习惯,特别是在计算机编程领域,技术方向种类繁多,永无止境.所以,我也开始我人 ...

  6. C语言的本质(15)——C语言的函数接口入门

    C语言的本质(15)--C语言的函数接口 函数的调用者和其实现者之间存在一个协议,在调用函数之前,调用者要为实现者提供某些条件,在函数返回时,实现者完成调用者需要的功能. 函数接口通过函数名,参数和返 ...

  7. C语言_来了解一下GCC编译器编译C可执行脚本的过程

    GCC简介    Linux系统下的gcc(GNU C Compiler)是GNU推出的功能强大.性能优越的多平台编译器,是GNU的代表作品之一.gcc是可以在多种硬体平台上编译出可执行程序的超级编译 ...

  8. gcc编译器与基本类型3

    C语言发展史 1969年贝尔实验室 肯尼斯·蓝·汤普逊,丹尼斯·李奇开发了B语言 ->Unix,New B语言,改名C语言83年提出C语言标准 1989年十二月正式通过C语言标准,C89标准 C ...

  9. C语言的本质(28)——C语言与汇编之用汇编写一个Helloword

    为了更加深入理解C语言的本质,我们需要学习一些汇编相关的知识.作为最基本的编程语言之一,汇编语言虽然应用的范围不算很广,但是非常重要.因为它能够完成许多其它语言所无法完成的功能.就拿 Linux 内核 ...

随机推荐

  1. Merge Sorted Array 解答

    Question Given two sorted integer arrays nums1 and nums2, merge nums2 into nums1 as one sorted array ...

  2. 快速排序(Quick Sort)

    快速排序是初学者比较难理解的几个算法之一,这里尽可简单化地讲解,希望能帮到大家. 快速排序基本步骤: 从数列中挑出一个元素,称为"基准"(pivot). 重新排序数列,所有元素比基 ...

  3. IO模型总结

    总结 幽默讲解 linux 的 Socket IO 模型(上)

  4. python高级编程之选择好名称:pepe8和命名最佳实践

    # # -*- coding: utf-8 -*- # # python:2.x # __author__ = 'Administrator' # my_list=['a','b','c','d'] ...

  5. C/C++基本数据类型所占字节数

    关于这个主要的问题,非常早曾经就非常清楚了,C标准中并没有详细给出规定那个基本类型应该是多少字节数,并且这个也与机器.OS.编译器有关,比方相同是在32bits的操作系统系,VC++的编译器下int类 ...

  6. JSTL解析——003——core标签库02

    上一节主要讲解了<c:if/><c:choose/><c:when/><c:otherwise><c:out/>标签的使用,下面继续讲解其它 ...

  7. Hacker(七)----黑客常用术语和DOS命令

    掌握基本的黑客术语和DOS命令是一名黑客最基本的技能,黑客术语能够实现自己和其他人之间的正常交流.DOS命令就是DOS操作系统的命令,它是一种面向磁盘的操作命令.黑客在入侵目标主机的过程中经常会使用这 ...

  8. sqlite3安装

    SQLite命令行程序(CLP)是开始使用SQLite的最好选择,按照如下步骤获取CLP: 1).打开浏览器进入SQLite主页,www.sqlite.org. 2).单击页面顶部的下载链接(Down ...

  9. Window.open 实现导航与打开窗口,导航到一个特定链接地址,也可以打开一个新的浏览器窗体

    语法 window.open(strUrl,strWindowName,strWindowFeatures ,replace) strUrl: 打开资源的地址 strWindowName: 表示窗体名 ...

  10. box-shadow讲解1

    谈谈box-shadow的具体使用方法 语法: E {box-shadow: <length> <length> <length>?<length>?| ...