序号 | 名称 | 功能描述 |
---|---|---|
1 | cpp | C预处理器 |
2 | gcc | C编译器 |
3 | g++ | C++编译器 |
4 | gccbug | 创建BUG报告的Shell脚本 |
5 | gcov | 覆盖测试 工具,用于分析在程序的哪个位置做优化效果最佳 |
6 | libgcc | GCC 的运行库 |
7 | libstdc++ | 标准C++库 |
8 | libsupc++ | 提供支持C++ 语言的函数库 |
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 | 共享对象库 ,也称动态库 |
gcc
编译过程:
从hello.c
到hello
(或a.out
)文件,必须历经hello.i
、hello.s
、hello.o
,最后才得到 hello
(或a.out
)文件,分别对应着预处理
、编译
、汇编
和链接
4个步骤,整个过程如图所示:
序号 | 步骤 | 工作内容 |
---|---|---|
1 | 预处理 (Preprocessing ) | C 编译器 对各种预处理命令 进行处理,包括(1) 头文件包含 、(2) 宏定义的扩展 、(3) 条件编译的选择 等 |
2 | 编译 (Compilation ) | 将预处理 后的文件进行词法分析 、语法分析 、语义分析 及优化 后,生成相应的.s 汇编文件 |
3 | 汇编 (Assemble ) | 将编译 后的汇编代码 翻译成机器码 ,生成.o 目标文件 |
4 | 链接 (Linking ) | 通过链接器ld 将目标文件 和库文件 链接在一起,生成可执行文件 |
链接
可分为动态链接
和静态链接
:
序号 | 链接 | 描述 |
---|---|---|
1 | 动态 链接 | 使用动态库 进行链接,生成的程序在执行的时候 需要加载 所需的动态库 才能运行。动态链接 生成的程序小巧,但是必须依赖动态库 ,否则无法执行 。 |
2 | 静态 链接 | 使用静态库 进行链接,生成的程序包含程序运行 所需要的全部库 ,可以直接运行 ,不过体积较大 。 |