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

简介:

本节书摘来自华章出版社《深入分析GCC 》一书中的第3章,第3.1节,作者 王亚刚 ,更多章节内容可以访问云栖社区“华章计算机”公众号查看。

第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-4.4.0.tar.bz2代码,进行源代码包的解压,并查看其主要的目录结构。

[GCC@host2 gcc-4.4.0]$ wget -c http://www.netgull.com/gcc/releases/gcc-4.4.0/gcc-4.4.0.tar.bz2
[GCC@host2 gcc-4.4.0]$ tar -xjvf gcc-4.4.0.tar.bz2
[GCC@host2 gcc-4.4.0]$ cd gcc-4.4.0; ls 
ABOUT-NLS           COPYING.LIB      libgfortran      MAINTAINERS
boehm-gc            COPYING.RUNTIME  libgomp          maintainer-scripts
ChangeLog           depcomp          libiberty        Makefile.def
ChangeLog.tree-ssa  fixincludes      libjava          Makefile.in
compile             gcc              libmudflap       Makefile.tpl
config              gnattools        libobjc          MD5SUMS
config.guess        include          libssp           missing
config-ml.in        INSTALL          libstdc++-v3     mkdep
config.rpath        install-sh       libtool-ldflags  mkinstalldirs
config.sub          intl             libtool.m4       move-if-change
configure           LAST_UPDATED     ltgcc.m4         NEWS
configure.ac        libada           ltmain.sh        README
contrib             libcpp           lt~obsolete.m4   symlink-tree
COPYING             libdecnumber     ltoptions.m4     tags
COPYING3            libffi           ltsugar.m4       ylwrap
COPYING3.LIB        libgcc           ltversion.m4     zlib

该源代码目录中的主要内容包括:
(1)与GCC编译配置有关的conf?ig*文件。
(2)lib*目录:各种各样的库文件,既包括一些通用的库文件,也包含一些与语言相关的库文件,例如libcpp中包含与C++语言相关的代码库文件,libada中包含与ADA语言相关的代码库文件。
(3)gcc目录中包含GCC的核心代码,包括了与各种编程语言相关的词法、语法等前端分析程序,与各种目标机器相关的机器描述文件,以及与前端语言无关且与机器无关的核心处理代码等。
使用如下shell命令可以列出gcc目录中的所有子目录,其中包含如下的一些子目录:

[GCC@host2 gcc-4.4.0]$ ls -l gcc | grep ^d
drwxrwxr-x.  3 GCC GCC   69632 Apr 21  2009 ada
drwxrwxr-x. 37 GCC GCC    4096 Apr 21  2009 config
drwxrwxr-x.  2 GCC GCC    4096 Apr 21  2009 cp
drwxrwxr-x.  3 GCC GCC    4096 Apr 21  2009 doc
drwxrwxr-x.  2 GCC GCC    4096 Apr 21  2009 fortran
drwxrwxr-x.  2 GCC GCC    4096 Apr 21  2009 ginclude
drwxrwxr-x.  2 GCC GCC    4096 Apr 21  2009 java
drwxrwxr-x.  2 GCC GCC    4096 Apr 21  2009 objc
drwxrwxr-x.  2 GCC GCC    4096 Apr 21  2009 objcp
drwxrwxr-x.  2 GCC GCC    4096 Apr 21  2009 po
drwxrwxr-x. 18 GCC GCC    4096 Apr 21  2009 testsuite

gcc目录下的gcc/cp、gcc/fortran、gcc/java、gcc/objc、gcc/objcp等子目录就是与各种编程语言相关的处理部分,这几个目录分别处理编程语言C++、Fortran、Java、Object C、Object C++等,C语言的处理则是GCC默认的处理前端语言,其部分处理代码在gcc/目录中。
进一步查看gcc/conf?ig目录中所包含的子目录:

[GCC@host2 gcc-4.4.0]$ ls -l gcc/config | grep ^d
drwxrwxr-x. 2 GCC GCC  4096 Apr 21  2009 alpha
drwxrwxr-x. 2 GCC GCC  4096 Apr 21  2009 arc
drwxrwxr-x. 2 GCC GCC  4096 Apr 21  2009 arm
drwxrwxr-x. 2 GCC GCC  4096 Apr 21  2009 avr
drwxrwxr-x. 2 GCC GCC  4096 Apr 21  2009 bfin
drwxrwxr-x. 2 GCC GCC  4096 Apr 21  2009 cris
drwxrwxr-x. 2 GCC GCC  4096 Apr 21  2009 crx
drwxrwxr-x. 2 GCC GCC  4096 Apr 21  2009 fr30
drwxrwxr-x. 2 GCC GCC  4096 Apr 21  2009 frv
drwxrwxr-x. 2 GCC GCC  4096 Apr 21  2009 h8300
drwxrwxr-x. 2 GCC GCC  4096 Apr 21  2009 i386
drwxrwxr-x. 2 GCC GCC  4096 Apr 21  2009 ia64
drwxrwxr-x. 2 GCC GCC  4096 Apr 21  2009 iq2000
drwxrwxr-x. 2 GCC GCC  4096 Apr 21  2009 m32c
drwxrwxr-x. 2 GCC GCC  4096 Apr 21  2009 m32r
drwxrwxr-x. 2 GCC GCC  4096 Apr 21  2009 m68hc11
drwxrwxr-x. 2 GCC GCC  4096 Apr 21  2009 m68k
drwxrwxr-x. 2 GCC GCC  4096 Apr 21  2009 mcore
drwxrwxr-x. 2 GCC GCC  4096 Apr 21  2009 mips
drwxrwxr-x. 2 GCC GCC  4096 Apr 21  2009 mmix
drwxrwxr-x. 2 GCC GCC  4096 Apr 21  2009 mn10300
drwxrwxr-x. 2 GCC GCC  4096 Apr 21  2009 pa
drwxrwxr-x. 2 GCC GCC  4096 Apr 21  2009 pdp11
drwxrwxr-x. 3 GCC GCC  4096 Apr 21  2009 picochip
drwxrwxr-x. 2 GCC GCC  4096 Apr 21  2009 rs6000
drwxrwxr-x. 2 GCC GCC  4096 Apr 21  2009 s390
drwxrwxr-x. 2 GCC GCC  4096 Apr 21  2009 score
drwxrwxr-x. 2 GCC GCC  4096 Apr 21  2009 sh
drwxrwxr-x. 2 GCC GCC  4096 Apr 21  2009 soft-fp
drwxrwxr-x. 2 GCC GCC  4096 Apr 21  2009 sparc
drwxrwxr-x. 2 GCC GCC  4096 Apr 21  2009 spu
drwxrwxr-x. 2 GCC GCC  4096 Apr 21  2009 stormy16
drwxrwxr-x. 2 GCC GCC  4096 Apr 21  2009 v850
drwxrwxr-x. 2 GCC GCC  4096 Apr 21  2009 vax
drwxrwxr-x. 2 GCC GCC  4096 Apr 21  2009 xtensa

从目录的名称上就可以看出来,这些目录分别对应了各种不同的目标机器名称。目录中包含的内容就是针对不同目标机器的机器描述文件,包括md文件及相应的c文件和h文件等。例如i386目录中包含了Intel x86处理器的机器描述文件等,arm目录中则包含了ARM处理器的机器描述文件等。
完整的目录结构说明请查阅GCC相关说明文档。也可以参考Uday Khedker的《GCC Source Code: An Internal View》(http://www.cse.iitb.ac.in/grc/)。

相关文章
|
3月前
|
NoSQL 编译器 开发工具
006.gcc编译器
gcc是什么?
44 0
006.gcc编译器
|
4月前
|
存储 NoSQL 算法
从一个crash问题展开,探索gcc编译优化细节
问题分析的过程也正是技术成长之路,本文以一个gcc编译优化引发的crash为切入点,逐步展开对编译器优化细节的探索之路,在分析过程中打开了新世界的大门……
414 1
|
8天前
|
C语言
转载 - gcc/ld 动态连接库和静态连接库使用方法
本文介绍了如何在GCC中实现部分程序静态链接、部分动态链接。使用`-Wl`标志传递链接器参数,`-Bstatic`强制链接静态库,`-Bdynamic`强制链接动态库。
15 0
|
1月前
|
编译器 C语言 C++
列举gcc 常见和有用的编译警告选项
列举gcc 常见和有用的编译警告选项
11 0
|
1月前
|
编译器 C语言
gcc编译警告:warning: suggest parentheses around assignment used as truth value
gcc编译警告:warning: suggest parentheses around assignment used as truth value
16 0
|
1月前
|
编译器 Linux C语言
gcc编译器的使用方法
gcc编译器的使用方法
21 1
|
2月前
|
编译器 C语言
gcc/g++语法
gcc/g++语法
|
4月前
|
C语言
gcc静态编译/usr/bin/ld: cannot find -lc
gcc静态编译/usr/bin/ld: cannot find -lc
|
5月前
|
编译器 程序员 C语言
gcc的编译过程和gcc与g++的区别
gcc的编译过程和gcc与g++的区别
53 0
|
6月前
|
C语言
编译安装gcc
编译安装gcc