gcc简介

gcc 命令的使用格式为:gcc [选项] [文件名] [选项] [文件名]

 gcc 命令拥有数量庞大的编译选项,按类型可以把选项分为以下几大类。 l

总体选项:用于控制编译的整个流程。

常用选项: -c:对源文件进行编译或汇编。 -E:对源文件进行预处理。 -S:对源文件进行编译。 -o file :输出目标文件 file 。-v:显示编译阶段的命令。 l

语言选项:用于支持各种版本的 C 语言程序。 常用选项: -ansi:支持符合 ANSI 标准的 C 程序。 l

警告选项:用于控制编译过程中产生的各种警告信息。

常用选项: -W:屏蔽所有的警告信息。 -Wall:显示所有类型的警告信息。 -Werror:出现任何警告信息就停止编译。  

调试选项:用于控制调试信息。

常用选项:

-g:产生调试信息。 l 优化选项:用于对目标文件进行优化。 常用选项:

-O1:对目标文件的性能进行优化。

-O2:在-O1 的基础上进一步优化,提高目标文件的运行性能。

-O3:在-O2 的基础上进一步优化,支持函数集成优化。

-O0:不进行优化。 l 连接器选项:用于控制链接过程。 常用选项:

-static:使用静态链接。

-l library :链接 librar y 函数库文件。

-L dir :指定连接器的搜索目录 dir 。

-shared:生成共享文件。 l

目录选项:用于指定编译器的文件搜索目录。 常用选项:

-I dir :指定头文件的搜索目录 dir 。

-Ldir:指定搜索目录 dir。

在 C 程序的编译过程中,依次要进行预处理、编译、汇编、链接四个阶段。这里通过编 译 C 文件 test.c 来展示 GCC 的工作流程。

  1. 预处理阶段 由于在 test.c 中使用了头文件 stdio.h,所以 GCC 在编译时首先要把头文件 stdio.h 中的内容加载到 test.c 中的首部。
  2. 编译阶段 编译阶段是整个编译过程中最复杂的一个阶段。这里拿自然语言的翻译过程作个对比。 比如在把“I love China”翻译成中文前,需要依次完成以下几个步骤:
  1. 考察这个句子中每个单词的拼写是不是正确。
  2. 考察整个句子的语法(比如主谓宾、定状补的结构等)是不是正确。
  3. 考察整个句子的语义是不是正确。

只有以上三个步骤都正常通过了,才能保证句子被正确翻译。同样,高级编程语言的编 译阶段也必须实现这三个步骤。

1) 步骤 1 称为词法分析,主要负责检查关键字、标识符等是否正确。

  1. 步骤 2 称为语法分析,主要负责检查程序中语句的语法是否正确。
  2. 步骤 3 称为语义分析,主要负责检查程序中语句的逻辑意义是否正确。
  1. 汇编阶段 汇编阶段的任务是把汇编程序翻译成 CPU 可以识别的二进制文件,该文件又称为目标 文件。
  2. 链接阶段 目标文件虽然已经可以被 CPU 直接识别,但是单个目标文件一般是无法运行的。原因 在于一个程序往往是由多个源文件组成的,每个源文件只对应一个目标文件。也许有人会问, test 程序不就只有一个源文件 test.c 吗,为什么也不能直接运行呢?原因是 test.c 使用 了 stdio.h 对应的库函数,所以必须要把 test.o 文件和函数库文件链接在一起才能运行。 链接阶段的任务就是把程序中所有的目标文件和所需的库文件都链接在一起,最终生 成一个可以直接运行的文件,称为可执行文件。

gcc 命令生成的可执行文件的有以下三种格式。

  1. a.out(Assembler and Link editor output);
  2. COFF(Common object file format);

3)ELF(Executable and linkable format);   

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值