https://clang.llvm.org/docs/Toolchain.html
Clang is only one component in a complete tool chain for C family programming languages. In order to assemble a complete toolchain, additional tools and runtime libraries are required. Clang is designed to interoperate with existing tools and libraries for its target platforms, and the LLVM project provides alternatives for a number of these components.
Clang 只是 C 系列编程语言完整工具链中的一个组件。为了组装一个完整的工具链,需要额外的工具和运行时库。 Clang 旨在与其目标平台的现有工具和库进行互操作,并且 LLVM 项目为许多这些组件提供了替代方案。
http://www.helloted.com/ios/2020/06/03/llvm-clang/
对比GCC
gcc的编译器,输入是源代码,输出是汇编代码,相当于是LLVM中Clang一级加上IR linker再加上LLVM compiler中的生成汇编代码部分(Clang输出可执行文件的一条龙过程,不会生成汇编文件,内部全部走中间表示,生成汇编码和生成目标文件是并列的)。
gcc的汇编器,输入是汇编代码,输出是目标文件,相当于是LLVM中的llvm-mc(这是另一个工具,Clang一条龙默认不走这个工具,但会调用相同的库来做汇编指令的下降和发射)。
gcc的链接器,输入是目标文件,输出是最终可执行文件,相当于LLVM中的Linker,现在LLVM Linker还在开发中(已释出,叫lld,但仍然不成熟),所以Clang驱动程序调起来的链接器还是系统链接器,可以选择使用gcc的ld(这块会很快变,LLVM社区必然会在lld成熟后默认换上去,大家可以自行验证)。