ARM Compiler for C and C++ in Linux

本文详细介绍了ARM自产编译器与GNU开源工具链的区别,包括如何从ARM官网下载GNU ARM Toolchain,以及在Ubuntu上使用apt-get安装的方法。重点讲解了toolchain的命名规则和不同版本的适用场景。

ARM的Linux平台的C/C++编译器有两个,一个是ARM自产的,一个是GNU的。

ARM自产的是收费的:

https://www.arm.com/ 打开官网,拉到网站最下面Support一列里选择Downloads。

在Download页面,下面有Other Popular Software and Tools,点击选择Arm Compiler for Linux。

打开的页面会提示,下载IED "Arm Allinea Studio", 里面就包含了“Arm Compiler for Linux”。

可以下载评估版,正常使用需要购买license。

而GNU是基于自由软件,基于GPL开源协议的,不收钱。

https://developer.arm.com/

打开ARM的开发者网站,在顶部的菜单栏里选择Tools and Software,菜单展开,选择Open Source Software。

转到新页面,在顶部菜单栏选择Developer Tools,菜单展开,直接点击GNU Toolchain,进入新页面。

这里就能看到GNU的ARM Processors Toolchain: 

Open source GNU tools for Arm processors: GCC, GDB, binutils, and libraries

分为两个,一个GNU-RM,表示Cortex-R和Cortex-M的芯片,这是bare metal的编译环境,比如Cortex-M系列的在单片机上直接执行程序的编译。

另一个是GNU-A,A-Profile,表示Cortex-A系列,基于Linux Kernel的应用程序的编译。

注意,GNU ARM Toolchain对C和C++的编译使用的命令是分开的。一个是arm-xxx-gcc,一个是arm-xxx-g++。

我们选择GNU-A,点击进去,再选择Download。

信息显示:

GNU Toolchain for the A-profile Architecture

Version 10.2-2020.11

Released: November 27, 2020

发现里面有这么一句:

This is the same toolchain that was previously distributed by Linaro.

就是说ARM GNU toolchain就是Linaro这个东东,去Linaro那里能找到最新的。

Linaro下载地址:

https://www.linaro.org/downloads/

----------------------------------- 

我们直接在ARM官网来下载tool chain:

https://developer.arm.com/tools-and-software/open-source-software/developer-tools/gnu-toolchain/gnu-a/downloads

我们一般选择使用Linux平台,比如一般大家使用的是Ubuntu作为开发主机,普通PC,x86-64架构的。

所以选择“x86_64 Linux hosted cross compilers”,选择32-bit平台下面2个分支,因为用的是ARM Cortex-A7(ARMv7-A)的iMX6系列芯片:

 - AArch32 bare-metal target (arm-none-eabi)

      * gcc-arm-10.2-2020.11-x86_64-arm-none-eabi.tar.xz

 - AArch32 target with hard float (arm-linux-none-gnueabihf)

      * gcc-arm-10.2-2020.11-x86_64-arm-none-linux-gnueabihf.tar.xz

这里toolchain的命名也是遵循一定规则的:arch[-vendor][-os]-abi

- arch表示架构类型:arm, mips, x86 ...

- vendor表示tool chain的供应商,比如apple

- os表示操作系统:linux,none(bare metal) 

- abi表示application binary interface约定:eabi, gnueabi, gnueabihf

EABI: embedded-application binary interface是一个嵌入式可执行程序的规范,包括数据类型、文件格式、寄存器使用、栈frame、函数指针传递等。

eabi表示ARM裸机可执行程序,gnueabi表示ARM上运行Linux系统的可执行程序。

abi就是普通的非嵌入式二进制程序接口。

所以,arm-none-eabi是裸机程序编译,arm-none-linux-gnueabihf是Linux系统上运行的程序。

那有个问题,arm-linux-gcc表示什么?

其实,这个就是省略了binary interface,而默认会编译出一个使用ABI的ARM架构的程序。

下载Linux版本,文件:gcc-arm-10.2-2020.11-x86_64-arm-none-linux-gnueabihf.tar.xz

$tar -xvf gcc-arm-10.2-2020.11-x86_64-arm-none-linux-gnueabihf.tar.xz

解压缩后,相关编译链接等工具就在bin路径下。

$./bin/arm-none-linux-gnueabihf-gcc helloworld.c

如果要在项目中使用这个工具链,请在makefile或cmake文件里设置相关toolchain路径。

或者将路径放到系统的可执行程序环境变量里也可以,配置文件: /home/username/.profile 或者/home/username/.bashrc (~/.bashrc)

在最后一行加上:

export PATH="/home/username/download/gcc-arm-10.2-2020.11-x86_64-arm-none-linux-gnueabihf/bin:$PATH"

export PATH="~/download/gcc-arm-10.2-2020.11-x86_64-arm-none-linux-gnueabihf/bin:$PATH"

------------------------------------------------ 

还有一种方法,在Ubuntu上使用apt-get直接安装:

$sudo apt-get update
$sudo apt-get install gcc-arm-linux-gnueabihf
这样直接安装使用也方便,只是版本可能不是最新的。
$arm-linux-gnueabihf-gcc helloworld.c
编译源文件。
$arm-linux-gnueabihf-gcc -v
查看版本。

使用gcc或者arm-linux-gnueabihf-gcc编译出的程序格式不同,执行环境不同。

gcc的在PC Linux上执行,arm的要在target board上执行。

$ file a.out

a.out: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=97fb9df8d6297b64fc43b971227c91f8e0de2bc5, for GNU/Linux 3.2.0, not stripped



$ file embedded

embedded: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux-armhf.so.3, for GNU/Linux 3.2.0, with debug_info, not stripped

--------------------------------------------------- 

gnueabihf和gnueabi的区别,hf表示hard-float。

ARM处理器的浮点数运算有软件和硬件两种,硬件是带一个FPU,floating-point unit,用来计算浮点数。

有FPU的ARM处理器,使能FPU后就能加速浮点运算。

如果没有FPU就使用fplib一个软件库来做浮点计算,肯定会消耗更多的计算时间。

我们使用gnueabihf编译代码即可,如果芯片不支持硬件浮点,好像也一样能用。

Arm Compiler for Embedded 6.24 是 Arm 为其嵌入式开发工具链提供的编译器版本之一,通常作为 Arm Development Studio 或 Keil MDK 的一部分提供。虽然目前没有直接提及 6.24 版本的具体信息,但可以合理推测它继承了早期版本的许多功能,并可能包括对新处理器的支持、性能改进和错误修复。 ### 获取 Arm Compiler for Embedded 6.24 要获取 Arm Compiler for Embedded 6.24,最可靠的方式是访问 Arm 官方网站并下载 Arm Development Studio 或 Keil MDK 的最新版本。这些工具包通常会包含对应版本的 Arm Compiler。如果需要独立安装包,可以查看 Arm 提供的独立编译器下载页面。在某些情况下,如引用[5]中提到的,较旧版本的编译器可能需要单独下载[^5]。 ### 使用说明 对于使用说明,建议查阅 Arm 提供的官方文档,例如引用[1]中提到的《Arm Compiler for Embedded Reference Guide》,尽管该指南是针对 6.18 版本的,但它涵盖了编译器的基本使用方法,这对于理解 6.24 版本同样具有指导意义[^1]。此外,设置环境变量 `ARM_COMPILER_PATH` 可以帮助用户快速定位到编译器的安装目录,如引用[3]所示[^3]。 ### 发布说明 发布说明通常会在 Arm 的官方公告或更新日志中找到,它们会详细列出新版本中的新增特性、已知问题、解决的问题以及安装指南等重要信息。为了获得 Arm Compiler for Embedded 6.24 的具体发布说明,建议查看 Arm 的官方支持页面或订阅相关的开发者新闻通讯。 如果你需要具体的命令行选项或者配置示例,请提供更详细的场景需求,以便给出针对性的帮助。 ```bash # 示例:设置 ARM 编译器路径 export ARM_COMPILER_PATH=/opt/arm/compiler/6.24 ``` ### 相关问题 1. 如何在 Linux 系统上安装 Arm Compiler for Embedded 6.24? 2. Arm Compiler for Embedded 6.24 支持哪些处理器架构? 3. 在使用 Arm Compiler for Embedded 6.24 进行编译时,如何启用特定的优化选项? 4. 如果遇到 Arm Compiler for Embedded 6.24 的兼容性问题,应该如何解决? 5. Arm Compiler for Embedded 6.24 是否有针对 C++17 或更高标准的支持增强?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

夜流冰

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

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

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

打赏作者

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

抵扣说明:

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

余额充值