GCC 及其选项

1.gcc编译器

1)程序的编译过程

在使用gcc编译程序时,编译过程可以分为4个阶段:

a.预处理(pre-processing

b.编译(compiling

c.汇编(assembing)

d.链接(linking

(2)在功能上,预处理,编译,汇编是三个不同的阶段

a.在预处理阶段,输入的是C语言的源文件,通常为*.c*.C.它们一般带有*.h之类的头文件。这个阶段主要处理

源文件中的#ifdef,#include,#define预处理命令。该阶段会生成一个中间文件*.i 文件

gcc -E tiger.c -o test.i

它通过对源文件tiger.c使用E选项来生成中间文件tiger.i

b.在编译阶段,输入的是中间文件*i,编译后生成汇编语言文件*s.这个阶段对应的gcc命令为:

gcc -S tiger.i -o tiger.s

c.在汇编阶段,将输入的汇编文件*.s转换成二进制机器代码*.o。这个阶段对应的gcc命令为:

gcc -c tiger.s -o tiger.o

d.最后,在链接阶段将输入的二进制机器代码文件*.o(于其他的机器代码文件和库文件)汇集成一个可执行的二进制代码文件。这个阶段使用的命令为:

gcc tiger.o -o tiger

最后生成了可执行文件tiger

(3)对于上述过程可以简化为:

gcc tiger.c -o tiger

(4)在实际开发中,使用gcc编译源程序时,源文件通常不止一个,这时就需要使用gcc编译多个源文件。使用下面的命令即OK

gcc -o tiger  tiger1.c tiger2.c  tiger3.c

该命令同时编译3个源文件tiger1.c tiger.c tiger3.c,最后生成一个可执行程序tiger

注意:一个程序无论是只有一个源文件还是多个源文件,在所有被编译和链接的源文件中必须有且只有一个main函数,因为main函数是每一个程序的入口点。

3.gcc 的常用选项

(1)gcc 的基本用法

gcc [options] [filenames]

其中options就是编译器所需要的选项,filenames给处相关的文件名

a. -c :只编译,不链接成可执行文件,编译器只是由输入的.c等为后缀的源代码文件生成.o为后缀的目标文件,通常用于编译不包含主程序的子程序文件

b. -o output_filename:确定输出文件的名称为output_filename,

c. -g:产生调试器gdb所必需的符号信息,要对源代码进行调试,就必须在编译程序时加入这个选项。

d. -O:对程序进行优化编译,链接,采用这个选项,整个源代码会在编译,链接过程中进行优化处理,这样产生的可执行文件的执行效率较高,但是,编译,链接的速度就相应地要慢一些

e. -O2:-O更好的优化编译,链接,当整个编译,链接过程会更慢(gcc提供5级优化,O0,O或O1,O2,Os,O3)

-Wall会打开一些很有用的警告选项,建议编译时加此选项

-W /-Wextra 打印一些额外的警告信息。

-w  禁止显示所有警告信息。

-Wshadow  当一个局部变量遮盖住了另一个局部变量,或者全局变量时,给出警告。很有用的选项,建议打开。 -Wall 并不会打开此项

-Winline 无论是声明为 inline 或者是指定了-finline-functions 选项,如果某函数不能内联,编译器都将发出警告。如果你的代码含有很多 inline 函数的话,这是很有用的选项。

-Werror 把警告当作错误。出现任何警告就放弃编译。


-v 打印较多信息,显示编译器调用的程序

--version gcc版本信息

-x language  指明使用的编程语言。允许的语言包括:c c++ assembler none 。 ‘none’意味着恢复默认行为,即根据文件的扩展名猜测源文件的语言

-pipe 使用管道代替临时文件。

-combine 将多个源文件一次性传递给汇编器

-C 告诉预处理器不要丢弃注释。配合`-E'选项使用


-l library 
-llibrary 
进行链接时搜索名为library的库。 
例子: $ gcc test.c -lm -o test

-Idir 
dir 加入到搜索头文件的路径列表中。 
例子: $ gcc test.c -I../inc -o test

-L dir  
dir  加入到搜索库文件的路径列表中。 


-Dname 
预定义一个名为name 的宏,值为1。 
例子: $ gcc -DTEST_CONFIG test.c -o test

-Dname =definition 
预定义名为name ,值为definition 的宏。


-s 
去除可执行文件中的符号表和重定位信息。用于减小可执行文件的大小。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值