明天去签Nokia E63
下决心了,希望顺利
《An Introduction to GCC》翻译工作1
今天开始了我的《An Introduction to GCC》翻译工作,心情极度舒畅,哈哈。
-
介绍
这本书的目的是解释如何使用GUN C 和C++ 编译器,命令行是gcc和g++.读完这本书你应该理解怎么编译一个程序, 并且知道怎么使用基本的编译器选项进行优化和调试。这本书并不会教授如何C语言和C++语言,相关的内容有很多(请参考第91页)。熟悉其他编译系统但是对于GUN系统陌生的有经验的程序员可以跳过前面几章,例如“编译一个C 程序”, “使用预处理器”和“编译一个C++程序”。 剩下的章节会向你们讲解GCC的大体特性。
-
-
GCC简史
-
GNU C编译器(GCC)的作者是Richard Stallman,GNU项目的奠基者。
GNU项目始于1984年,目的是生成一个类似Unix操作系统的一个免费软件,以此增加计算机使用者和程序员之间的自由度和合作。每一个类UNIX操作系统都需要一个C编译器, 不过那时候没有免费的编译器,所以GNU项目需要从头开发。这项工作的到了一个非盈利性组织Free software Foundation的个人以及公司的赞助和支持。
GCC的第一个版本发布于1987年。这是一个重大的突破,因为它是第一个支持ANSI C可移植的免费编译器。从那时候开始GCC变成一个极为重要的免费开发工具。
1992年,GCC 2.0系列发布, 这是一个重要的修正,因为它开始支持编译C++。1997年, 一个编译器测试分支诞生,叫做EGCS,以增强优化和支持C++。紧接着,EGCS变成GCC开发的一个新主线,并且这些特性被广泛的应用于2001年发布的GCC3.0版本。
逐渐的,GCC被增加了扩展以支持更多语言, 包括Fortran,ADA, JAVA和Objective-C。如今GCC已经是“GNU Complier Collection”的代名词,其发展由一个叫做GCC Steering Committee的由GCC社区内工业,研究和教育的代表组成的组织来主持。
-
-
GCC的主要特性
-
这部分主要讲解GCC的一些最重要的特性。
首先,GCC是一个可移植的编译器, 他可以在很多平台上运行,并且为不同种类的处理器生成输出。不单单是个人电脑的处理器, 还支持微处理器,例如DSP和64位CPU。
GCC不仅是一个本地编译器, 它支持交叉编译任何程序,可以在一个系统上面为不同的系统产生可执行文件。这样的一个好处就是可以为嵌入式系统编译软件, 因为嵌入式系统无法运行一个编译器。GCC用C编写,非常注重可移植性,所以它不但可以编译自己, 还易于用于新系统。
GCC有许多语言的前端,用于分析不同语言。任何语言编写的程序都可以为了不同体系结构而编译或者交叉编译。比如一个ADA程序可以编译后用于微处理器,或者一个C程序被编译后用于超级计算机。
GCC是模块化设计,可以增加对新语言和系统结构的支持。如果有正确的运行时文件(例如库文件)
那么增加一个编程语言的前端文件给GCC,GCC就可以在任何系统结构上使用这种语言。同样,增加一个对新系统结构的支持,那么也可以使用编程语言于这个新系统里。
最后, 也就是最重要的, GCC是免费软件,按照GUN GPL协议分发。这就意味着你可以自由使用和修改GCC,就像GUN其他的软件一样。 如果你需要对一种新的CPU的支持,或者新的语言或者特性的支持, 你可以自己增加到GCC里面, 或者雇别人来增强你的GCC。如果GCC对你的工作有一个很重要的错误的话, 你也可以雇别人来修复这个错误。
更多的是, 你可以自有分享你对GCC的增强特性。当然你也可以自由使用其他人对GCC的增强性修改。GCC让所有使用它的人在工作中得益于其自由特性。
-
-
C和C++编程
-
C和C++是允许直接存取计算机内存的语言。历史上曾经使用它们编写低级系统软件,或者一些设计高性能和系统资源控制的重要应用。 但是,正确存取计算机内存需要特别小心, 还要避免破坏系统数据结构。这本书将描述一些检测编译过程中的潜在错误的技巧, 但是使用像C和C++这样的编程语言所带来的风险从来不会少。
除了C和C++, GNU项目还高级语言,例如GNU Common Lisp(GCL),GNU Smalltalk(GST),GNU策略扩展语言(GUILE)和GNU的JAVA编译器(GCJ)。这些语言不允许用户直接存取计算机内存,从而减少了内存存取错误的几率。在实际应用中,它们相比于C和C++, 更加安全。
-
-
本手册使用惯例
-
这本手册包含了许多例子,终端输入的命令行象这样:
$ Command
后面跟着其输出结果。例如:
$ echo “hello world”
hello world
在终端出现的第一个符号是终端提示符,不需要键盘打出来。很多系统是用别的符号, 但是本手册里面的标准提示符是$.
当一个命令太长难以在一行里面显示出来时,会折到下一行显示。例如:
$ echo “an example of a line which is too long to fit
in this manual”
当用键盘输入时, 整个命令需要被输入到一行里面。
本手册所有的例子代码文件都可以从出版商的网站(http://www.network-theory.Co.uk/gCC/intro/)下载到,或者可以手工在文本编辑器里面输入,例如标准GNU编辑器,emacs. 例子中的编译命令用gcc和g++表示GNU C和C++ 的编译器名字,CC被指向了别的编译器。所有举例程序都能用于所有版本的GCC。任何近支持新版本GCC的命令行选项会标记出来。
我们假定所有例子都运行于一个GNU的操作系统--实际上在别的操作系统上差别不大。有一些不重要或者冗余的系统依赖的输出信息(例如非常长的系统路径)会在例子中简化。设定环境变量的命令使用标准GNU bash的语法,并且可以工作于任何bash的版本。