C++学习记录

Posted by Bill on January 31, 2024

1. 基础知识

1.1 编译工具链

编译工具链是一组协同工作的工具集,用于将源代码编译成可执行程序。在C++编程中,这通常包括编译器、链接器和其他一些工具。这些工具处理源代码,进行编译、链接和其他必要的步骤,以生成可在计算机上运行的软件。

常用的C++编译工具链包括:

  • GNU compiler(gcc/g++) : 广泛使用的开源编译工具链,支持多种语言
  • clang/clang++: 非常流行的编译器前端, llvm的一部分

C/C++编译流程

编译流程分为四个阶段:预处理、编译、汇编、链接

  • 预处理: 处理一些宏定义命令或语句(如#define、#include、#ifdef等),生成.i文件
  • 编译:进行词法分析、语法分析和语义分析等,生成.s的汇编文件
  • 汇编:将对应的汇编指令翻译成机器指令,生成二进制.o目标文件
  • 链接:链接分为两种
    • 静态链接
      • 在链接期,将静态链接库中的内容直接装填到可执行程序中。
      • 在程序执行时,这些代码都会被装入该进程的虚拟地址空间中。
    • 动态链接
      • 在链接期,只在可执行程序中记录与动态链接库中共享对象的映射信息。
      • 在程序执行时,动态链接库的全部内容被映射到该进程的虚拟地址空间。其本质就是将链接的过程推迟到运行时处理

C/C++编译流程图

// todo

参考