《深入分析GCC 》——1.2 GCC的特点

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/conf?ig/目录下包含了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的完整支持。

时间: 2024-10-07 20:47:53

《深入分析GCC 》——1.2 GCC的特点的相关文章

gcc 编译-编译GCC,建立mcore的编译器

问题描述 编译GCC,建立mcore的编译器 因为芯片跟mcore比较类似,所以要用这个试试,可是这编译器就搞不定了. GCC安装的依赖包:gmp-5.0.1 mpfr-3.1.3 mpc-1.0.1 configure参数: $ ../configure --prefix=/home/xxxx/mcore-linux-gcc --with-gmp=/usr/local/gmp-5.0.1 --with-mpfr=/usr/local/mpfr-3.1.3 --with-mpc=/usr/loc

《深入分析GCC 》——3.2 GCC的逻辑结构

3.2 GCC的逻辑结构 GCC的源代码文件数量庞大,目录结构复杂,总体结构理解有一定的难度,但从代码功能和逻辑结构上来讲,这些代码大致可以分为如图3-1所示的几个部分. 图3-1分为上下两个部分,上半部分使用GCC表示GCC 4.4.0的源代码内容,下半部分使用gcc/cc1表示使用GCC源代码编译生成的编译器程序.图3-1的上半部分根据源代码的功能将GCC源代码分为4大部分:(1)高级语言相关代码(High-Level-Language Specif?ic Code).在GCC的源代码中,对

《深入分析GCC 》——2.2 GNU gdb调试工具

2.2 GNU gdb调试工具 调试工具是代码分析中至关重要的工具之一.在使用vim+ctags查看代码时,经常会遇到难以理解的部分,此时,可以借助调试工具,对代码的运行过程进行跟踪,通过跟踪运行过程以及关键数据的变化,可以从程序执行的过程中理解源代码的功能. 调试工具有很多种,最常用的是GNU gdb工具.下面通过一个例子,介绍如何使用gdb,这些调试命令几乎就是笔者调试程序的所有命令,简单且实用.关于完整的gdb的使用,请参与GNU gdb文档,或者使用man gdb进行在线查询. 本例主要

《深入分析GCC 》——2.5 GCC调试选项

2.5 GCC调试选项 GCC本身对包含了众多的调试选项,既可以为用户程序生成调试信息,也可以将GCC运行过程中的关键信息保存在文件或输出在终端上,常用的调试选项如表2-2所示.如果需要了解GCC在处理的各个阶段里中间表示的具体内容,或者需要了解GCC中某个处理过程对于中间表示的处理细节时,就可以使用表2-2中给出的各种GCC调试选项,输出GCC运行过程中所生成的中间表示的调试信息和处理过程细节,并结合GCC的代码,从而了解GCC的具体工作细节. 假设有如下的源代码: [GCC@localhos

《深入分析GCC 》——第3章 GCC总体结构3.1 GCC的目录结构

第3章 GCC总体结构GCC是一个复杂的软件系统,例如gcc-4.4.0.tar.gz软件包中包含了成千上万个文件.本章主要对GCC的代码结构和目录结构进行介绍,阐明GCC的主要模块及其相互关系,并给出GCC源代码编译的主要步骤和关键问题.3.1 GCC的目录结构GCC的源代码可以从GCC的官网(https://gcc.gnu.org)上获得.该源代码包主要包括bz2和gz两种压缩形式的tar包,以gcc-4.4.0为例,分别为gcc-4.4.0.tar.bz2及gcc-4.4.0.tar.gz

GCC性能优越的多平台编译器详解

不经意间,GCC已发展到了4.3的版本,尽管在软件http://www.aliyun.com/zixun/aggregation/36661.html">开发社区之外乏人闻问,但因为GCC在几乎所有开源软件和自由软件中都会用到,因此它的编译性能的涨落会直接影响到Linux .Firefox 乃至于OpenOffice.org和Apache等几千个项目的开发.因此,把GCC摆在开源软件的核心地位是一点也不为过.另一方面,GCC4.3的出现,正在牵引着广大程序员们的心.如果我们非要用一个词来说

让你的 PHP 7 更快 (GCC PGO)

我们一直致力于提升PHP7的性能,  上个月我们注意到GCC的PGO能在Wordpress上能带来近10%的性能提升,  这个让我们很激动. 然而,  PGO正如名字所说(Profile Guided Optimization 有兴趣的可以Google), 他需要用一些用例来获得反馈, 也就是说这个优化是需要和一个特定的场景绑定的. 你对一个场景的优化, 也许在另外一个场景就事与愿违了.  它不是一个通用的优化. 所以我们不能简单的就包含这些优化, 也无法直接发布PGO编译后的PHP7. 当然,

GCC的内嵌汇编语法

1 Overview 开发一个OS,尽管绝大部分代码只需要用C/C++等高级语言就可以了,但至少和硬件相关部分的代码需要使用汇编语言,另外,由于启动部分的代码有大小限制,使用精练的汇编可以缩小目标代码的Size.另外,对于某些需要被经常调用的代码,使用汇编来写可以提高性能.所以我们必须了解汇编语言,即使你有可能并不喜欢它.     如果我们选择的OS开发工具是GCC以及GAS的话,就必须了解AT&T汇编语言语法,因为GCC/GAS只支持这种汇编语法.  本文只讨论AT&T的汇编语法,以及G

gcc或clang中消除特定警告的方法

    一般在编译代码时会有相当多的警告信息,尤其当我们使用了-Wall选项的时候.-Wall绝不是像其字面意思一样打开所有警告.不过它打开的警告也相当多了.对于一些我们已知"无害"但仍然打印出来挤占可怜的控制台空间的警告,我们当然可以将其"屏蔽"掉.     就拿以下代码来说: #include <stdio.h> #include <stdlib.h> #include <stdbool.h> #include <uni