图1-1 GNU及GCC的图标
初期的GCC仅仅作为C语言的编译器,即GNU C Compiler。1987年GCC 1.0发布,同年12月,GCC开始支持C++语言,随后,GCC开始支持Objective-C、Objective-C++、Fortran、Java和Ada等
语言。与此同时,GCC也被逐渐移植到各种各样的主流处理器体系结构上,包括i386、ix86_64、SPARCE、ARM和MIPS等处理器平台。
自从1987年Richard Stallman和Len Tower发布GCC的第一个版本GCC 1.0以来,目前GCC的最新版本已经更新到GCC 6.0,https://gcc.gnu.org/releases.html给出了GCC在各个时期推出的GCC版
本,其中最重大的变化是在1999年7月,GCC与EGCS(Experimental/Enhanced GNU Compiler System)重新融合并发布了GCC 2.95版本。
相关的资料可以查阅以下官方网站信息:
GNU Compiler Collection:https://gcc.gnu.org/
Free Software Foundation:http://www.fsf.org/
GNU Project:https://gnu.org/
GNU Public License:https://www.gnu.org/licenses/licenses.en.html#GPL
1.2 GCC的特点
GCC作为目前较为成功的编译系统之一,具有非常突出的优点,主要包括:
(1)GCC编译系统支持众多的前端编程语言,GCC 4.4.0中${GCC_SOURCE}/gcc/目录下包含了前端编程语言处理的目录及其代码(其中,${GCC_SOURCE}表示GCC源代码的主目录,下同),主要
包括C、C++、Ada、Fortran、Java、Objective-C、Objective-C++等语言的前端处理,可以使用如下命令查看这些目录:
[GCC@localhost gcc-4.4.0]$ ls -l gcc
drwxrwxr-x. 3 GCC GCC 69632 Apr 21 2009 ada
drwxrwxr-x. 2 GCC GCC 4096 Nov 27 2013 cp
drwxrwxr-x. 2 GCC GCC 4096 Nov 6 15:14 fortran
drwxrwxr-x. 2 GCC GCC 4096 Oct 9 17:34 java
drwxrwxr-x. 2 GCC GCC 4096 Apr 21 2009 objc
drwxrwxr-x. 2 GCC GCC 4096 Apr 21 2009 objcp
(2)GCC支持众多的目标机器体系结构,具有良好的可移植性,GCC 4.4.0的${GCC_SOURCE}/gcc/config/目录下包含了GCC对目标处理器的支持情况,其中包括了各种主流的处理器,例
如,arm、i386、mips以及alpha等,以下是GCC 4.4.0代码所支持的处理器列表:
alpha arc arm avr cris
crx fr30 frv h8300 i386
ia64 iq2000 m32c m32r m68hc11
m68k mcore mips mmix mn10300
pa pdp11 picochip rs6000 s390
score sh sparc spu stormy16
v850 vax xtensa
(3)GCC具有丰富的配套工具链支持。
GCC不是一个孤立的编译工具,而是整个GNU工程中的一个组成部分。GNU工程中的其他软件,包括GNU C库glibc、GNU的调试工具gdb,以及GNU二进制工具链binutils(GNU Binutils
Toolchains,例如汇编工具as,连接工具ld,目标文件分析工具objdump、objcopy等)等都与GCC关系密切,互相依赖。
可以使用下述的shell命令查看GNU二进制工具链中主要包括的工具:
[GCC@localhost paag-gcc]$ rpm -ql binutils | xargs ls -l | grep "/usr/bin"
-rwxr-xr-x. 1 root root 24352 Oct 15 2014 /usr/bin/addr2line
-rwxr-xr-x. 1 root root 54444 Oct 15 2014 /usr/bin/ar
-rwxr-xr-x. 1 root root 527220 Oct 15 2014 /usr/bin/as
-rwxr-xr-x. 1 root root 26356 Oct 15 2014 /usr/bin/c++filt
-rwxr-xr-x. 1 root root 99212 Oct 15 2014 /usr/bin/gprof
-rwxr-xr-x. 1 root root 588116 Oct 15 2014 /usr/bin/ld
-rwxr-xr-x. 1 root root 38800 Oct 15 2014 /usr/bin/nm
-rwxr-xr-x. 1 root root 212216 Oct 15 2014 /usr/bin/objcopy
-rwxr-xr-x. 1 root root 276528 Oct 15 2014 /usr/bin/objdump
-rwxr-xr-x. 1 root root 54448 Oct 15 2014 /usr/bin/ranlib
相关文档
评论