arm 各种 gcc 编译器区别

做嵌入式开发在以前经常需要下载交叉编译器,主要是因为那个时候的产品绝大多数位 arm架构的,而市面上基本上的 PC/服务器基本上 X86。即便现在 arm架构的笔记本和服务器慢慢推向市场,原由的那套嵌入式开发仍然无法替代,也就是说还需要使用 arm的 gcc编译器。

从早先的 arm架构到现在的 ARMv9,在不同的领域分为 Cortex-A, Cortex-R, Cortex-M,有些做的好的 IDE会把相关的 arm编译器集成进去,典型的 MDK、DS-5、ARM Developer,这些软件收费还是很高的。

gcc编译器命名规则:

        

   arch [-vendor] [-os] [-(gnu)eabi]- gcc

  • 带 [] 的是可选部分。
  • arch: 芯片架构, arm 或者 aarch64,mips等
  • vendor :工具链提供商,大部分工具链名字里面都没有包含这部分。
  • os :编译出来的可执行文件(目标文件)针对的操作系统,比如 Linux。
  • eabi - 嵌入式应用二进制接口(Embedded Application Binary Interface)

几种常见的 arm的 gcc编译器

arm-none-eabi:这个是没有操作系统的,不支持那些系统调用等等系列接口

arm-none-linux-eabi:则是使用Glibc,系统对应的是 linux

arm-eabi-gcc: 用于早期的安卓程序编译

arm-none-linux-gnueabi-gcc 用于 gnu下的 linux系统应用程序

armcc:   ARM 公司推出的编译工具,可以编译裸机程序(u-boot、kernel),一般和ARM开发工具一起,Keil MDK、ADS、RVDS和DS-5中的编译器都是armcc

arm各种 gcc编译器区别

        不同的 arm gcc编译器还是有不少区别, 根据编译出来的可执行程序, 通过当前编译器对应的 readelf可以看出, 比如 aarch64-linux-gnueabi-readelf

        

gcc 编译器加入环境变量

        Linux系统默认的 gcc编译会把相关的 gcc安装到 /usr/bin下面,这个是放在 PATH变量里,这样不用每次都要使用绝对路径。

        在 Ubuntu系统可以通过 apt命令直接安装,这样就不需要加到环境变量,但很多时候需要特定的工具链,特别是涉及多种架构代码的编译。

多个版本的 gcc如何切换

        通过 update-alternatives来指定特定版本的 gcc

sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-9 90 --slave /usr/bin/g++ g++ /usr/bin/g++-9 --slave /usr/bin/gcov gcov /usr/bin/gcov-9

sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-8 80 --slave /usr/bin/g++ g++ /usr/bin/g++-8 --slave /usr/bin/gcov gcov /usr/bin/gcov-8

sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-7 70 --slave /usr/bin/g++ g++ /usr/bin/g++-7 --slave /usr/bin/gcov gcov /usr/bin/gcov-7

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

tcutee

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值