gcc编译器(2)

Gcc使用格式:
gcc [ 选项 ] [ 文件名 ] [ 选项 ] [ 文件名]
gcc 命令拥有数量庞大的编译选项,按类型可以把选项分为以下几大类。
(1)总体选项:用于控制编译的整个流程。
常用选项:
-c:对源文件进行编译或汇编。
-E:对源文件进行预处理。
-S:对源文件进行编译。
-o file :输出目标文件 file。
-v:显示编译阶段的命令。
(2) 语言选项:用于支持各种版本的 C 语言程序。
常用选项: -ansi:支持符合 ANSI 标准的 C 程序。
(3)警告选项:用于控制编译过程中产生的各种警告信息。
常用选项:
-W:屏蔽所有的警告信息。
-Wall:显示所有类型的警告信息。
-Werror:出现任何警告信息就停止编译。
(4)调试选项:用于控制调试信息。
常用选项: -g:产生调试信息。
(5) 优化选项:用于对目标文件进行优化。
常用选项:
-O1:对目标文件的性能进行优化。
-O2:在-O1 的基础上进一步优化,提高目标文件的运行性能。
-O3:在-O2 的基础上进一步优化,支持函数集成优化。
-O0:不进行优化。
(6)连接器选项:用于控制链接过程。
常用选项:
-static:使用静态链接。
-l library :链接 library 函数库文件。
-L dir :指定连接器的搜索目录 dir 。
-shared:生成共享文件。
(7)目录选项:用于指定编译器的文件搜索目录。
常用选项:
-I dir :指定头文件的搜索目录 dir 。
-L dir:指定搜索目录 dir。
GCC 工作流程:在 C 程序的编译过程中,依次要进行预处理、编译、汇编、链接四个阶段。这里通过编译 C 文件 test.c 来展示 GCC 的工作流程。例如:
test.c

#include <stdio.h>
int main()
{
 printf(“Hello world!\n”);
 return 0;
}
  1. 预处理阶段
    由于在 test.c 中使用了头文件 stdio.h,所以 GCC 在编译时首先要把头文件 stdio.h中的内容加载到 test.c 中的首部。由于在 test.c 中使用了头文件 stdio.h,所以 GCC 在编译时首先要把头文件 stdio.h中的内容加载到 test.c 中的首部。
  2. 编译阶段编译阶段是整个编译过程中最复杂的一个阶段。这里拿自然语言的翻译过程作个对比。比如在把“I love Changzhou”翻译成中文前,需要依次完成以下几个步骤:
    1)考察这个句子中每个单词的拼写是不是正确。
    2)考察整个句子的语法(比如主谓宾、定状补的结构等)是不是正确。
    3)考察整个句子的语义是不是正确。
  3. 汇编阶段
    汇编阶段的任务是把汇编程序翻译成 CPU 可以识别的二进制文件,该文件又称为目标文件。
  4. 链接阶段
    链接阶段的任务就是把程序中所有的目标文件和所需的库文件都链接在一起,最终生成一个可以直接运行的文件,称为可执行文件。链接阶段的任务就是把程序中所有的目标文件和所需的库文件都链接在一起,最终生成一个可以直接运行的文件,称为可执行文件。
    gcc 命令生成的可执行文件的有三种格式:
    a.out(Assembler and Link editor output)
    COFF(Common object file format)
    ELF(Executable and linkable format)
    其中,a.out 和 COFF 格式都是比较老的格式,现在 Linux 平台上可执行文件的主流格式是 ELF。

猜你喜欢

转载自blog.csdn.net/qzp1806128/article/details/82860818