1. GCC介绍
编写过C和C++的朋友对GCC一定不会陌生,GCC最初是由GNU开发的C语言编译器,后很快扩展,变得可以支持C++,后来又扩展能够支持更多编程语言,如Fortran、Pascal、Objective-C、Java、Ada、Go以及各类处理器架构上的汇编语言等,所以改名GNU编译器套件(GNU Compiler Collection)。
GCC原本作为GNU操作系统的官方编译器,后来被大多数类UNIX操作系统采纳为标准编译器。
2. GCC编译C语言
常用做法:
gcc hello.c -o hello
编译器会直接生成可执行文件hello。
那么编译器中间经过了哪些步骤呢?
3. 编译过程
3.1 预处理
执行命令
gcc -o hello.i -E hello.c
gcc预处理器将处理以#开头的命令,如#include xxx.h ,预处理器将直接把xxx.h中的内容插入到hello.i中。可通过命令查看最终内容
vi hello.i
3.2 转化为汇编
执行命令
gcc -o hello.s -S hello.i
编译器将c语言编译为汇编语言,可通过命令查看最终内容
vi hello.s
3.3 编译汇编
执行命令
gcc -o hello.o -c hello.s
编译器将汇编语言便以为机器语言保存在hello.o中,这是个二进制文件,可通过命令查看其内容
hexdump hello.o
3.4 链接阶段
执行命令
gcc -o hello hello.o
链接阶段负责将我们程序中使用的公共库进行关联,比如hello.c使用了printf函数,此函数保存在printf.o文件中,链接阶段就负责进行这种关联。链接后的都可执行文件hello,运行之
./hello
4 总结
源文件→预处理OP→汇编化OP→机器码OP→链接OP→可执行文件
注:OP为操作,两端为文件