GNU是一个类Unix操作系统,GNU是GNU is NOT Unix的递归首字母缩写。 GCC--GNU Compiler Collection,GNU编译器集合,支持C,C++,Objective-C,Fortran,Ada,GO等语语言。
gcc/g++,分别为GCC编译器C,C++语言前端,分别编译C和C++源码,并交给GCC后端生成机器码。
嵌入式工具链:实现代码的编译,链接以及生成可执行代码等。
主流嵌入式工具链接:Arm Compiler for Embedded,gcc-arm-none-eabi,IAR,GCC for ARM等
Arm Compiler for Embedded有AC5,AC6两个主流版本,内部包含:
armcc,armlink,fromlf等工具,其中AC6使用armclang替代armcc。
armcc和armclang区别:
1. **GCC** (GNU Compiler Collection)是 GNU 开发的编译器,许可证为 GPL 的自由软件;
2. GCC 原来只能处理 C,现在可以处理 C++、Pascal、Object-C、Java 等。
3. 苹果公司之前一直使用 GCC 作为编译器,但是 GCC 对 Objective-C 支持一直不怎么好,好多新特性没有增加,所以苹果公司开始寻求编译器的替代品。
4. 这个时候LLVM就出现了,是 Chris Lattner 在硕士和博士时提出和形成的编译器,不过其是采用 GCC 的前端进行语义分析,然后 LLVM 做优化和生成目标代码,可以叫做 LLVM-GCC。
5. 后来苹果公司直接计划绕开 GCC,于是招募了 Chris Lattner 博士开发编译器,Clang 就这样诞生了,其基于 LLVM 开发的 C/C++/Obj-C 编译器,实际上其是一个编译器前端,来取代 GCC 或者超越 GCC
6. armcc 是 arm 公司开发的一款编译器,集成在 KEIL 以及 ARM DS IDE 里面,于5.06版本后停滞(AC5),不继续维护,其前端基于 Edison Design Group 。
7. armclang 集成于 armcc,基于新的架构 clang 和 LLVM,作为 arm 的第六代编译器,AC6,成为今后主推的编译器
keil使用Arm Compiler for Embedded工具链,vscode platfromIO使用gcc-arm-none-eabi工具链。