Miracle

有梦想就不会觉得苦。
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

gcc

Posted on 2011-05-23 16:31  gsky  阅读(231)  评论(0编辑  收藏  举报

 gcc是一个工具链(集),是由GNU组织开发的。

该工具链是由binutils,gcc,glibc组成。

binutils是由一组编译,连接,汇编和其他调试目的程序组成。如ar用于生成静态库,size用于列出目标文件的每一段的大小。

gcc是GNU的C与C++的编译器,Linux环境下默认的C语言编译器。

glibc是GNU的C语言标准函数库。该库实行了Linux的系统函数,如open,也实现了标准的C语言库,如fopen。几乎所有的程序都需要与glibc链接。

gcc 编译器能将C,C ++语言源程序、编译成可执行的目标文件。

在 Linux 系统中,可执行的目标文件没有统一的后缀,系统从文件的属性来区分可执行目标文件和不可执行目标文件。

通过file命令可以判断一个文件的属性。

使用gcc编译程序时,编译过程可以被细分为四个阶段:

预处理(Pre-Processing ) 

编译(Compiling ) 

汇编(Assembling )

链接(Linking)

gcc 通过文件后缀来区别输入文件的类别:

.c 为后缀的文件:C 语言源代码文件

.a 为后缀的文件:是由目标文件构成的库文件

.C , .cc 或.cxx 为后缀的文件:是 C++源代码文件 

.h 为后级的文件:头文件

.i 为后缀的文件:是已经预处理过的 C 源代码文件 

.ii 为后缀的文件:是已经预处理过的 C + +源代码文件 

.o为后缀的文件:是编译后的目标文件 

.s 为后缀的文件:是汇编语言源代码文件 

.S 为后级的文件:是经过预编译的汇编语言源代码文件

常规选项-E,-S,-c分别对应预处理,编译,汇编过程。

不加以上3个选项则为链接过程。

-o指定以上4个阶段生成的文件名。

库就是包含了一些通用函数的可执行的程序文件。

库分为动态库与静态库。

静态库一般以libname.a命名。

动态库一般以libname.so[.主版本号.次版本号.发行号]命名。

1 生成目标文件gcc -c -o vv.o vv.c 

2 生成静态库ar rcs libstack.a vv.o

3 为静态库制作头文件v.h

4 编译程序gcc -I./ -L./ v.c -lstack 

5 运行程序./a.out

动态库编译速度块,运行速度慢,是程序比较小,易于维护。

静态库编译速度慢,运行速度快,但是程序比较臃肿,难于维护。