GCC(GNU Compiler Collection,GNU 编译器套装),现在支持编译解释多种语言如 C++ 和 Java。
格式:gcc [选项] [文件]
GCC 可以一次性完成 C 语言源文件的编译,但分步编译可以理解每一步做了什么工作。
在 vim 编辑器上编写以下代码并保存为 hello.c。
#include <stdio.h>
int main(){
printf("hey, girl!\n");
return 0
}
分步编译 C 语言程序
GCC 编译一个 C 语言程序需要以下四步,以 hello.c 为例。
- 预处理生成
.i
文件。 - 编译成汇编语言,生成
.S
文件。 - 汇编后生成目标文件
.o
文件。 - 将各个模块的
.o
文件链接起来生成一个可执行文件。
- 预处理阶段
gcc -E hello.c -o hello.i
执行以上命令生成 hello.i
文件,本过程主要是处理预处理问题,例如宏的展开问题、文件的包含问题。
- 编译阶段
gcc -S hello.i
执行后生成 hello.s
文件,里面全是汇编指令,学习汇编的同学应该知道。
- 汇编阶段
gcc -c hello.s
该过程生成 hello.o
目标文件,但是不进行链接。
- 链接阶段
gcc hello.o -o hello
链接完会生成 hello
可执行文件。
直接生成可执行文件
进入 hello.c 的目录下运行:
gcc hello.c
然后你会在目录下发现 a.out
文件,然后运行,指令如下
./a.out
./
表示当前目录