Chinaunix首页 | 论坛 | 博客
  • 博客访问: 901463
  • 博文数量: 113
  • 博客积分: 3160
  • 博客等级: 少校
  • 技术积分: 1801
  • 用 户 组: 普通用户
  • 注册时间: 2011-08-19 10:09
文章分类

全部博文(113)

分类: LINUX

2012-05-22 20:25:36


第3章 GCC编译程序集合及相关工具

 


3.1 gcc基本应用


GCC全称为 GNU 编译程序集合,它集成了预处理器,汇编编译器以及链接器等很多实用工具。对于c语言的编译过程来说,可以分为以下几个步骤:首先,GCC需要调用预处理程序cpp,由它负责展开在源文件中定义的宏,并向其中插入以#键开头的语句所包含的内容;接着,GCC会调用ccl将c语言编译成汇编代码;然后as将处理后的汇编代码编译成目标代码;最后,GCC会调用链接程序ld,把生成的目标代码链接成一个可执行程序。它的基本步骤如下:

 

 

预处理: gcc -E -o test.i test.c

编译: gcc -S -o test.s test.i

汇编: gcc -c -o test.o test.s

链接:    ld     -o test test.o

 

3.2 gcc常用编译选项


-E:预处理,生成纯C文件,后缀为.i

-S:编译,生成汇编文件,后缀为.s

-c:汇编,生成目标文件,后缀为.o

-o:生成可执行文件

 

-x lauguage:指定使用的语言

-L library:指定所使用的库文件

-I directory:为include文件搜索指定路径

 

-g:插入符号信息便于调试

-w:禁止一切警告

-Wall:打开所有警告

-padantic:严格要求符合ANSI标准

-pg:产生gprof所用信息

 

 

-O(O1,O2,O3):对代码进行优化

-m*** : 根据不同处理器进行优化

3. 3警告


在gcc中常用-Wall选项打开所有警告信息,而用-w关闭警告。

 

3.4 调试


在使用gdb进行调试之前,必须在编译时加入-g调试选项,使得gcc在目标文件和可执行文件中加入额外的符号信息,这些信息能使gdb更有效的进行调试。

 

3.5 优化


优化是编译器的一部分,它可以是生成的代码更有效率。在gcc中,我们可以使用-O1,O2,O3选项来对代码进行优化,其数字越高,代表gc优化级别越高。但是,优化可能会带来一些负面的影响。例如,优化过程可能占用太多时间,或者优化后的代码会占用更多更大的内存空间,另外,优化级别越高,调试的难度可能会越大,因为优化器可能为了更有效率而重组许多声明,或者删除某些无用的代码。所以,优化过程最好选在开发工作快要结束的时候,而且优化级别一般为O2。

 

3.6其它工具介绍


1:c预处理器cpp:完成宏的求值,条件编译,处理包含文件以及其它以‘#’开头的标志。

2:ccl编译器:将处理之后的纯C文件编译成汇编,以供汇编器汇编

3:汇编器as:gcc在编译程序时会生成汇编代码,as会处理这些代码,从而生成目标文件。

4:链接器ld:将多个目标文件组合起来,并结合函数库和初始化代码,产生可执行文件。

5:文件处理器ar:建立静态库,把几个小文件组合成一个大文件。

5:库显示ldd:显示可执行文件使用的共享文件库。

6:calls:输出文件里函数的调用树图。

7:indent:使源代码产生统一的缩进格式。

8:gprof:显示程序中每个函数被调用次数和每个函数的执行时间。(由于gprof的分析数据很多,查看这些数据的时候,最好将输出重定向到指定的文件中。)

9:objdump:显示目标文件和库的信息。

10:nm : 列出目标文件中定义的符号。

12:size : 列出目标文件每部分的名字和尺寸。

13: make:读取makefile脚本来确定程序中哪一部分需要汇编和链接,然后执行相关命令。

阅读(2638) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~