1. 基础知识
1.1 编译工具链
编译工具链是一组协同工作的工具集,用于将源代码编译成可执行程序。在C++编程中,这通常包括编译器、链接器和其他一些工具。这些工具处理源代码,进行编译、链接和其他必要的步骤,以生成可在计算机上运行的软件。
常用的C++编译工具链包括:
- GNU compiler(gcc/g++) : 广泛使用的开源编译工具链,支持多种语言
- clang/clang++: 非常流行的编译器前端, llvm的一部分
C/C++编译流程
编译流程分为四个阶段:预处理、编译、汇编、链接
- 预处理: 处理一些宏定义命令或语句(如#define、#include、#ifdef等),生成.i文件
- 编译:进行词法分析、语法分析和语义分析等,生成.s的汇编文件
- 汇编:将对应的汇编指令翻译成机器指令,生成二进制.o目标文件
- 链接:链接分为两种
- 静态链接
- 在链接期,将静态链接库中的内容直接装填到可执行程序中。
- 在程序执行时,这些代码都会被装入该进程的虚拟地址空间中。
- 动态链接
- 在链接期,只在可执行程序中记录与动态链接库中共享对象的映射信息。
- 在程序执行时,动态链接库的全部内容被映射到该进程的虚拟地址空间。其本质就是将链接的过程推迟到运行时处理
- 静态链接
// todo