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
本文详细介绍了C/C++程序的编译流程,包括预处理、编译、汇编和链接四个阶段,以及每个阶段产生的文件类型。同时,深入解析了GNU Compiler Collection (GCC) 的相关指令和参数,帮助读者理解如何使用GCC逐步完成编译过程。
6248

被折叠的 条评论
为什么被折叠?



