简介

  • 常见的C和C++编译器相关笔记
  • 目前常见的编译器有
    • GCC
    • LLVM + clang
    • TCC
    • MSVC

GCC

  • GCC,全称为GNU Compiler Collection(GNU编译器套装),是自由软件基金会(Free Software Foundation,FSF)的GNU项目下的一个核心组件。它是一个开源的,跨平台的编译器系统,支持多种编程语言,包括但不限于C,C++,Objective-C,Objective-C++,Fortran,Ada,Go,D和Rust等。GCC不仅能够编译源代码,在命令行中,你可以使用GCC来编译C代码,使用g++来编译C++代码,还能够进行预处理,汇编和链接,最终生成可执行文件或库文件。
  • 官方网站
    • https://gcc.gnu.org
  • 使用GCC的基本步骤
    • 预处理(gcc -E): 这个阶段会处理源代码中的预处理指令,例如#include, #define等。
    • 编译(gcc -c): 将预处理后的源代码转换为汇编代码
    • 汇编(gcc -S): 将汇编代码转换为目标代码(机器代码)
    • 链接(gcc): 将一个或多个目标文件和所需的库链接起来,生成可执行文件。

LLVM + clang

  • LLVM(Low Level Virtual Machine)是一个开源的编译器框架项目,它不仅是一个虚拟机,更是一个现代化的,模块化且可重用的编译器基础设施。
  • 主要组成部分
    • 前端(Frontend): 负责将源代码转换为LLVM IR,例如Clang是C, C++, Objective-C等语言的前端
    • 优化器(Optimier): 对IR进行一系列的分析和转换,以提高代码的执行效率。
    • 后端(Backend): 将优化后的IR转换为目标机器代码,包括汇编代码生成器和连接器支持
    • 库和工具: 除了核心编译器组件,LLVM项目还包括了一系列库和工具,例如LLD(LLVM链接器),Polly(自适应优化),Sanitizer工具集(用于内存错误检测等)以及Clang工具套件(例如Clang Static Analyzer)

MSVC

  • MSVC(Microsoft Visual C++ Compiler)是微软公司为Windows平台开发的一个C++编译器系列,它是Visual Studio集成开发环境的一部分。MSVC不仅支持C++,也支持C语言的编译。
  • MSVC与Visual Studio的关系: MSVC作为Visual Studio的核心组件之一,负责C和C++代码的编译工作。虽然随Visual Studio一同发布,但是它有自己的版本控制系统,与Visual Studio的版本并不完全对应
  • ABI兼容性: MSVC的主要版本号表示ABI(应用二进制接口)兼容性,意味着使相同主要版本号的MSVC编译的代码可以在不同项目间链接,只要这些项目也是用相同版本号的MSVC编译的。这一特性有助于保持二进制的兼容性,减少依赖问题。

  • 开发与集成
    • 集成开发环境: MSVC深度集成于Visual Studio,提供图形界面进行项目管理,代码编写,编译配置,调试等功能
    • 命令行工具: 除了图形界面外,MSVC也提供了命令行工具(例如cl.exe),允许开发者通过脚本或者终端直接编译代码,适用于自动化构建和持续集成环境
    • 第三方工具和IDE兼容: 尽管MSVC主要与Visual Studio一起使用,它也可以与其他IDE(例如 Qt Creator)集成,只需要正确配置工具链即可。