C/C++ 编译流程(预处理、编译、汇编、链接)

C/C++ 程序常用文件名后缀:

序号 拓展名 说明
1 .a 静态库,由目标文件构成的文件库
2 .c 源码,必须经过预处理
3 .C  .cc  .cpp C++ 源码,必须经过预处理
4 .h C/C++ 源码的头文件
5 .i .c 经过预处理得到的 C源码
6 .ii .C .cc .cpp 经过预处理得到的 C++源码
7 .s 汇编语言文件,是.i文件编译后得到的中间文件
8 .o 目标文件,是编译过程得到的中间文件
9 .so 共享对象库,也称动态库

 

程序的基本流程:

 

序号 步骤 工作内容
1 预处理Preprocess C 编译器对各种预处理命令进行处理,包括
(1)展开所有的头文件
(2)宏定义的替换
(3)解析条件编译 并添加到文件中
2 编译Compile 将预处理完的文件进行词法分析语法分析语义分析优化后,生成相应的 .s 汇编代码
3 汇编Assemble 将编译完的汇编代码翻译成机器码,并生成可重定位目标程序的 .o 目标文件
4 链接Link 通过链接器 ld目标文件库文件链接在一起,最后生成可执行文件(executable file)

 

GCC(GNU Compiler Collection,GNU编译器套件,是由 GNU 开发的编程语言编译器)的相关指令和参数如下:

序号 命令 工作内容
1 gcc  -E  hello.c  -o  hello.i 预处理(预处理器 Preprocessor:cpp。-E 只对文件进行预处理,不编译汇编和链接)
2 gcc  -S  hello.i  -o  hello.s 编译(编译器 Compiler:gccg++。-S 只对文件进行编译,不汇编和链接)
3 gcc  hello.s  -o  hello.o 汇编(汇编器 Assembler:as
4 gcc  hello.o  -o  hello 链接(链接器 Linker:ld

GCC 单步完成编译

第1种命令:gcc   hello.c   -o   hello

第2种命令:gcc  -o  hello  hello.c

你可能感兴趣的:(C,基础)