深入分析GCC
上QQ阅读APP看书,第一时间看更新

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
          -rwxr-xr-x. 1 root root 288560 Oct 15    2014 /usr/bin/readelf
          -rwxr-xr-x. 1 root root   27196 Oct 15   2014 /usr/bin/size
          -rwxr-xr-x. 1 root root   25832 Oct 15   2014 /usr/bin/strings
          -rwxr-xr-x. 1 root root 212244 Oct 15    2014 /usr/bin/strip

(4)GCC提供可靠、高效、高质量的目标代码。

GCC是目前使用的最为广泛的编译器系统之一,众多工业级应用的实践证明,GCC编译系统生成的代码具有很高的可靠性和运行效率。

(5)GCC对于并行编译的支持。

在GCC 4.4.0中,已经提供了对OpenMP的完整支持。