C/C++ 程序常用文件名后缀:
序号 | 拓展名 | 说明 |
1 | .a | 静态库 ,由目标文件 构成的文件库 |
2 | .c | 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:gcc,g++。-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