`
javasogo
  • 浏览: 1773579 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

C核心技术手册(三十六)

 
阅读更多

第三部分 基础工具

第十八章 GCC的使用

本章介绍如何使用GCCC的源代码编译为可执行程序,首先,我们介绍GCC基本的选项及编译的步骤,接着我们介绍如何使用GCC的警告选项来检查程序,最后,我们总结编译优化的选项。

本章提供最基本的GCC知识给你,如果更细节的知识,如体系结构的细节或系统的特殊选项,这些基本的方向将告诉你如何在GCC手册中查找你想要的。手册在GCC发布版本中以文本的形式包含。你也可以查看HTML格式的文档,路径为:http://gcc.gnu.org/onlinedocs/

18.1 GNU编译器

GCC以前为“GNU C Compiler”的缩写,自从它出现以后,就开始支持除过C之外的其他编程语言,包括C++, Ada, Object-C, FortranJava, 所以GCC的含义被重新定义为”GNU Compiler Collection”,此编译器合并了好多特性来翻译不同的语言,在本书中,我们仅关心和C相关的特性。

GCC为一个多目标的编译器,换句话讲,它有可互换的模块来为许多不同的计算机体系结构产生输出,就像组合式概念所建议的,GCC也可以被用做交叉编译,就是说,你可以生成与GCC运行的操作系统不同的系统上的执行程序,然而,这需要进行特殊的配置,而且绝大多数GCC适合生成于它们所运行系统相同系统上的执行程序。

GCC不仅支持许多C的“方言”版本,而且能够区分它们,换句话说,你可以使用命令行参数来控制在编译你的程序时,依据哪种C语言标准,对所有C99的特性支持还没有全部完成,GCC的开发者们维护了一个目前支持C99特性的列表,参见http://gcc.gnu.org/c99status.html

18.2 获取和安装GCC

如果你有一个类UNIX系统,很可能已经安装了GCC,为了找出它,可以在命令提示符下输入 cc –version来查看,如果GCC已经安装,且使用默认的C编译器名称cc,你将会看到编译的版本号及版权信息:

[duanyx@localhost root]$ cc --version

cc (GCC) 3.4.6 20060404 (Red Hat 3.4.6-3)

Copyright (C) 2006 Free Software Foundation, Inc.

This is free software; see the source for copying conditions. There is NO

warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

如果GCC可能已经安装,但是名子不是cc,以防万一,试着使用其固有的名称为调用编译器,如下:

[duanyx@localhost root]$ gcc –version

如果GCC没有安装,请教你的系统卖主看是否GCC在系统的二进制安装包中,否则,你可以从自由软件基金获取GCC源码,然后在你的系统上编译它,源码路径:http://gcc.gnu.org/mirrors.html,参考http://gcc.gnu.org/install/.上的指导一步步进行,如果你仅想支持C的编译,这时你仅需要GCC的“核心发行版本”,它将去除其他语言的模块,其大小仅为GCC软件包大小的一半。

如果你的系统中根本没有C编译器,那就不能编译GCC源码,你需要安装一个编译的二进制,GCC的网站上维护了一个使用第三方编译器编译好的GCC安装包,并支持从AIXWindows的不同系统。

18.3 GCC编译C程序

当运行GCC时,它的默认行为是由源代码生成可执行程序,举一个简单的例子,我们使用GCC来编译本书第一个例子Example1-1,如下:

# gcc -Wall circle.c

这个命令行仅含有一个编译名、源文件名和一个选项:-Wall,用来指导GCC在程序中有警告存在时将警告信息打印出来, 可在本章的后面的“编译器警告”一节得到更多信息。如果源文件中没有错误,GCC运行并退出,不会打印任何信息。它的输出为在当前路径下产生一个程序文件,采用默认名称a.out(在Windows中,默认的名称为a.exe, 我们可以运行这个程序:

# ./a.out

它将产生如下的输出:

[root@localhost gcc_test]# ./a.out

Areas of Circles

Radius Area

-------------------------

1.0 3.14

5.0 78.54

如果不想让可执行程序名称为a.out,可以使用 –o 选项来为输出文件指定一个文件名:

# gcc -Wall -o circle circle.c

此命令产生相同的执行程序,但现在的名子为circle

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics