《Linux C编程从入门到精通》一2.2 Linux中的C语言编译器gcc

2.2 Linux中的C语言编译器gcc

Linux C编程从入门到精通
gcc(GNU C Compiler)是GNU推出的功能强大、性能优越的多平台编译器,使用gcc可以编译C和C++源代码,编译出的目标代码质量非常好,编译速度也很快。本节主要讨论gcc的安装与使用方法。

2.2.1 gcc的安装

在Ubuntu12.04中,gcc是已安装好的,但是其还缺少常用的头文件和库文件,所以还需要安装build-essential这个包,可以在联网状态下使用如下命令来安装这个包。

$ sudo apt-get install build-essential

其中,apt-get是Ubuntu中的软件管理命令,它可以安装、删除、更新系统中的软件包。Install是安装软件包,build-essential是待安装的软件包名称。由于安装软件需要root权限,因此系统会提示输入密码。在输入密码后,系统会自动安装编译所需要的相关文件。系统在安装build-essential时,会把程序文件放入以下几个目录。

/usr/lib。大部分的编译程序放在这个目录。在这里由编译时需要的可执行程序,还有一些特定版本的库文件与头文件等。
/usr/bin/gcc。指的是编译程序,即实际在命令行中执行的程序。这个目录可供各个版本的gcc使用,只要用不同的编译程序目录来安装就可以。
/usr/include。这个目录及其子目录中包含程序所需要的头文件。缺少头文件,gcc在编译时会出现找不到头文件的错误。
在安装完成之后,可以使用“gcc-v”命令来查看gcc的版本号。

[email protected]:~$ gcc –v
使用内建 specs。
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/lib/gcc/i686-linux-gnu/4.6/lto-wrapper
目标:i686-linux-gnu
配置为:../src/configure --v --with-pkgversion=’Ubuntu/Linaro 4.6.3-1Ubuntu5’ --with-bugurl=file:///usr/share/doc/gcc-4.6/README.Bugs --enable-languages=c,c++,fortran,objc,obj-c++ --prefix=/usr --program-suffix=-4.6 --enable-shared --enable-linker-build-id --with-system-zlib --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --with-gxx-include-dir=/usr/include/c++/4.6 --libdir=/usr/lib --enable-nls --with-sysroot=/ --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes--enable-gnu-unique-object --enable-plugin --enable-objc-gc --enable-targets=all --disable-werror --with-arch-32=i686 --with-tune=generic --enable-checking=release --build=i686-linux-gnu -–host=i686-linux-gnu --target=i686-linux-gnu
线程模型:posix
gcc 版本 4.6.3 (Ubuntu/Linaro 4.6.3-1Ubuntu5)

注意:由于gcc仍然处于不断完善与更新之中,每隔几个月就会有新的稳定发行版本产生,用户可以通过访问http://www.gnu.org/software/gcc/来了解gcc的最近发展,下载最新的软件套件。

2.2.2 gcc的使用

gcc对C语言的处理需要经过如下4个步骤。

预处理。这—步需要分析各种命令,如#define、#include、#if等。Gcc调用cpp程序来进行预处理工作。
编译。这一阶段根据输入文件产生汇编语言。由于通常是立即调用汇编程序,所以其输出一般不保存在文件中。Gcc调用ccl进行编译工作。
汇编。这一步将汇编语言用作输入,产生具有.o扩展名的目标文件。Gcc调用as进行汇编工作。
链接。这一阶段中,各目标文件被放在可执行文件的适当位置上,该程序引用的函数也放在可执行文件中(对使用共享库的程序稍有不同)。Gcc调用链接程序1d来完成最终的任务。
和大多数shell命令一样,gcc的基本使用方式如下。

gcc [选项] 文件名

gcc可以通过选项对程序的生成进行全面控制,每个选项可以有多种取值,在此只对其中常用部分进行介绍,其余的参数可以参考gcc手册或其他专门资料。Gcc的常用选项如表2.1所示。

gcc的命令选项可以组合使用,不过在使用时,每个命令选项都要有一个自己的连字符“-”。如果采用简写的方式,很可能使命令的含义完全不同。

在Linux下生成的可执行文件没有固定的扩展名。任何符合Linux要求的文件名,只要文件的访问属性中有可以执行的属性,该文件就是可以执行的。因此,在使用上面介绍的-o filename参数时,如果是生成链接后的可执行文件,filename变量可以取任意一个符合Linux要求的文件名。

gcc命令中的第2部分是一个输入给gcc命令的文件。gcc按照命令选项的要求对输入文件进行处理,形成结果输出文件。输入的文件不一定是C的源代码文件,还可能是预处理文件、目标文件等。如何确定输入文件的类型,gcc是通过输入文件的扩展名来确定的。表2.2是gcc与C相关的输入文件扩展名命名规范。

【例2.1】gcc编译器应用实例1。

【例2.1】是使用gcc来对一个C语言文件进行编译的应用实例,这个C语言文件被命名为ExamHello.c,使用cat命令可以查看该文件的内容:

[email protected]:~/chapter2Exam$ cat -n Examhello.c
1  #include  <stdio.h>
2
3  int main(void)
4  {
5    printf("This is a gcc test!\n");
6    return 0;
7  }

此时可以使用gcc命令对这个文件进行编译,然后运行。

[email protected]:~/chapter2Exam$ gcc Examhello.c -o Examhello
[email protected]:~/chapter2Exam$ ./Examhello
This is a gcc test!

在实际的开发过程中经常遇到应用代码比较复杂的情况,此时通常采用将主函数和其他函数放在不同文件中的方法。除了主程序之外,每个函数都由函数声明(函数头)和函数实现(函数体)两部分组成。函数的声明一般放在头文件(.h)中,而函数的定义文件放在实现文件中(.c)。gcc可以很容易地把多个源文件编译成目标代码并链接起来,如【例2.2】所示。

【例2.2】gcc编译器应用实例2。

这是使用另外一个C语言文件来存放输出函数的实例,在当前工作目录下建立一个C语言文件,其内容如下。

[email protected]:~/chapter2Exam$ cat -n Examhellosun.c
     1  #include <stdio.h>
     2
     3  void sunprintf(void)
     4  {
     5    printf("this is a test from anthor .c!/n");
     6  }

然后建立一个.h头文件,其内容如下。

[email protected]:~/chapter2Exam$ cat -n Examhello.h
     1
     2  void sunprintf(void);
在Examhello.c文件声明对应的头文件。

[email protected]:~/chapter2Exam$ cat -n Examhello.c
     1  #include <stdio.h>
     2  #include "Examhello.h"
     3
     4  int main(void)
     5  {
     6    printf("This is a gcc test!\n");
     7    return 0;
     8  }
     9

可以使用如下的命令来对这两个C语言文件进行编译。

[email protected]:~/chapter2Exam$ gcc Examhello.c Examhellosun.c -o Examhello
时间: 2017-05-02

《Linux C编程从入门到精通》一2.2 Linux中的C语言编译器gcc的相关文章

《Linux C编程从入门到精通》》一2.4 Linux中的调试环境gdb

2.4 Linux中的调试环境gdb Linux C编程从入门到精通 从图2.1中可以看到,在实际开发过程中,程序除了语法正确之外,还必须符合设计者的逻辑意图.如果结果不正确,则可以通过相应的调试环境来跟踪调试,本小节将介绍Linux中最常用的gdb调试环境. Linux包含了一个gdb的调试程序,gdb是一个用来调试C程序的强大的调试器,它使程序员能在程序运行时观察程序的内部结构和内存的使用情况.gdb提供了以下一些功能. 监视程序中变量的值. 设置断点以使程序在指定的代码行上停止执行. 一行

《Linux C编程从入门到精通》》一导读

前言 Linux C编程从入门到精通 行业背景 Linux操作系统是一种类UNIX操作系统,其代码是开源的,任何开发者.爱好者都可以免费使用,因此一经推出便风靡世界.Linux自从面世以来,经不同开发者和程序员的开发,现在存在着许多不同的版本,这些版本的根本都在于使用了Linux内核.当前,Linux操作系统安装在各种各样的计算机设备中,包括手机.平板电脑.游戏控制器.台式计算机.大型机和超级计算机.Linux是一个领先的操作系统,世界上运算最快的10台超级计算机运行的都是Linux操作系统.

《Linux C编程从入门到精通》一第1章 Linux基础1.1 Linux的起源、发展和分类

第1章 Linux基础 Linux C编程从入门到精通 Linux是一套免费使用和自由传播的类UNIX操作系统,它已发展成为现今世界上最流行的一种操作系统.Linux不仅仅能在PC机上运行,随着嵌入式系统的发展,它已经被广泛地应用于各种场合. 1.1 Linux的起源.发展和分类 Linux C编程从入门到精通 Linux从1991年问世到现在已经有20多年的历史,它从一个架构简单的系统内核发展到了现在结构完整.功能丰富的多版本操作系统,本小节将介绍其起源发展和分类. 1.1.1 Linux的起

《Linux C编程从入门到精通》一1.3 Shell的使用基础

1.3 Shell的使用基础 Linux C编程从入门到精通 由于在C语言开发中常常需要和Shell打交道,本小节将简要介绍Shell的基本使用方法,终端的运行界面可以参考图1.5,以下仅仅给出在其中进行操作的相应字符串. 1.3.1 Shell命令的标准格式 Shell和用户交互是以字符串形式存在的命令和命令输出反馈的方式进行的,在Linux命令行中输入的第一个字符串必须是一个命令的名字,第二个字符串是命令的选项或参数,命令行中的每个字符串必须由空格键或Ta键隔开,格式如下. $ 命令 选项

《Linux C编程从入门到精通》一1.4 Linux的常用命令

1.4 Linux的常用命令 Linux C编程从入门到精通 在Shell中,用户需要通过使用适当的命令来完成相应的操作,本小节将介绍Linux中的部分常用命令. 1.4.1 文件操作命令 文件操作是Linux系统里最基本也是最常用的操作,本节列举了Linux中经常执行的一些普通文件操作命令. 1.显示文件列表 显示指定工作目录中所包含内容的命令是ls.要说明的是,ls命令列出的是文件的名字,而不是文件的内容.该命令的使用方式如下. ls [选项] [文件目录列表] ls命令中的常用选项如表1.

《Linux C编程从入门到精通》一第2章 在Linux中编写C语言代码2.1 Linux中C语言程序开发流程和工具介绍

第2章 在Linux中编写C语言代码 Linux C编程从入门到精通 Linux作为一个操作系统,一项重要的功能就是要支持用户编程.传统的UNIX下的程序开发语言是C语言,C语言是一种平台适应性强.易于移植的语言.Linux是用C语言写成的.反过来,Linux又为C语言提供了很好的支持,C语言编译工具gcc.调试工具gdb属于最早开发出来的一批自由软件.因此Linux与C语言形成了完美的结合,为用户提供了一个强大的编程环境,本章将介绍在Linux中编写C语言程序的流程和具体方法. 2.1 Lin

《Linux C编程从入门到精通》——2.2 Linux中的C语言编译器gcc

2.2 Linux中的C语言编译器gcc gcc(GNU C Compiler)是GNU推出的功能强大.性能优越的多平台编译器,使用gcc可以编译C和C++源代码,编译出的目标代码质量非常好,编译速度也很快.本节主要讨论gcc的安装与使用方法. 2.2.1 gcc的安装在Ubuntu12.04中,gcc是已安装好的,但是其还缺少常用的头文件和库文件,所以还需要安装build-essential这个包,可以在联网状态下使用如下命令来安装这个包. $ sudo apt-get install bui

《Linux C编程从入门到精通》——导读

**前言**Linux操作系统是一种类UNIX操作系统,其代码是开源的,任何开发者.爱好者都可以免费使用,因此一经推出便风靡世界.Linux自从面世以来,经不同开发者和程序员的开发,现在存在着许多不同的版本,这些版本的根本都在于使用了Linux内核.当前,Linux操作系统安装在各种各样的计算机设备中,包括手机.平板电脑.游戏控制器.台式计算机.大型机和超级计算机.Linux是一个领先的操作系统,世界上运算最快的10台超级计算机运行的都是Linux操作系统.本书是Linux C语言开发的基础教程

《Linux C编程从入门到精通》——第 2 章 在Linux中编写C语言代码 2.1Linux中C语言程序开发流程和工具介绍

第 2 章 在Linux中编写C语言代码 Linux作为一个操作系统,一项重要的功能就是要支持用户编程.传统的UNIX下的程序开发语言是C语言,C语言是一种平台适应性强.易于移植的语言.Linux是用C语言写成的.反过来,Linux又为C语言提供了很好的支持,C语言编译工具gcc.调试工具gdb属于最早开发出来的一批自由软件.因此Linux与C语言形成了完美的结合,为用户提供了一个强大的编程环境,本章将介绍在Linux中编写C语言程序的流程和具体方法. 2.1 Linux中C语言程序开发流程和工