GCC的基本用法

目录

一、GCC

二、GCC、gcc、g++三者关系

三、gcc编译过程

四、文件类型

五、gcc编译选项


一、GCC

GCC(GNU Compiler Collection)即GNU编译器套件,属于一种编程语言编译器,其原名为GCC(GNU C Compiler)即GNU c语言编译器,虽然缩写一样但是功能上区别很大。GCC的初衷是为GNU操作系统专门编写的一款编译器,原本的GNU是专用于编译C代码,现如今已扩展为可以编译C、C++、Java、Objective-C等多种编程语言的编译器集合了

二、GCC、gcc、g++三者关系

  gcc(GNU C Compiler)是GCC中的c编译器,而g++(GNU C++ Compiler)是GCC中的c++编译器。gcc和g++两者都可以编译c和cpp文件,但存在差异。gcc在编译cpp时语法按照c来编译但默认不能链接到c++的库(gcc默认链接c库,g++默认链接c++库)。g++编译.c和.cpp文件都统一按cpp的语法规则来编译。所以一般编译c用gcc,编译c++用g++。

三、gcc编译过程

用gcc编译*.c文件并非直接生成可执行文件,中间还经历了预处理、编译和汇编几个过程

 

  • 在预处理阶段,gcc会把需要调用的头文件包含进来,替换宏常量和宏代码段
  • 在编译阶段,gcc会检查代码的规范性、是否有语法错误等,在检查无误后,gcc会把文件翻译成 .s 后缀的汇编文件
  • 在汇编阶段,gcc会把 .s 后缀的汇编文件 翻译成 .o后缀的目标文件(机器可识别的二进制文件)
  • 在链接阶段,gcc会把目标文件链接到库中,生成可执行文件

四、文件类型

在Linux系统中,可执行文件没有统一的后缀,系统从文件的属性来区分可执行文件和不可执行文件。而gcc则通过后缀来区别输入文件的类别,下面介绍gcc所遵循的部分约定规则

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

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

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

.h为后缀的文件,是程序所包含的头文件;

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

.m为后缀的文件,是Objective-C源代码文件;

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

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

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

五、gcc编译选项

选项

作用

E

激活预处理;头文件、宏等展开(.i文件)

S

激活预处理、编译;生成汇编代码(.s文件)

c

激活预处理、编译、汇编;生成目标文件(.o文件)

激活预处理、编译、汇编、链接;生成可执行文件(.out文件)

o

生成目标

Wall

打开编译告警(所有)

g

嵌入调试信息,方便gdb调试

llib

链接 lib 库 (这里是小写 L ) 相当于 C++ #pragma comment(lib, “xxx.lib”)

Idir

增加 include 目录 (这里是大写 i ) 头文件路径

LDir

增加 lib 目录 (编译静态库和动态库)

假设源程序文件名为test.c。

1. 无选项编译链接

用法:gcc test.c

作用:将test.c预处理、汇编、编译并链接形成可执行文件。这里未指定输出文件,默认输出为a.out。

2. 选项 -o

用法:gcc test.c -o test

作用:将test.c预处理、汇编、编译并链接形成可执行文件test。-o选项用来指定输出文件的文件名。

3. 选项 -E

用法:gcc -E test.c -o test.i

作用:将test.c预处理输出test.i文件。

4. 选项 -S

用法:gcc -S test.i 

作用:将预处理输出文件test.i汇编成test.s文件。

5. 选项 -c

用法:gcc -c test.s

作用:将汇编输出文件test.s编译输出test.o文件。

6. 无选项链接

用法:gcc test.o -o test

作用:将编译输出文件test.o链接成最终可执行文件test。

7. 选项-O

用法:gcc -O1 test.c -o test

作用:使用编译优化级别1编译程序。级别为1~3,级别越大优化效果越好,但编译时间越长。

你可能感兴趣的:(【Linux】,开发语言)