ARM Compiler for C and C++ in Linux

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编译代码即可,如果芯片不支持硬件浮点,好像也一样能用。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: ARM Compiler 5是一款面向ARM架构微控制器的编译器,可供嵌入式开发者使用。它支持多种编程语言,包括C、C++、汇编语言和FORTRAN,并且可以生成高效的代码,提高应用程序的性能。 该编译器具有灵活的可配置性和可扩展性,可以适应不同的应用需求。它提供了多种优化选项,包括代码大小优化、性能优化和指令选择优化等,可以根据不同的应用场景进行选择。 除了编译器本身,ARM Compiler 5还具有一些有用的工具和库,如调试器、链接器、运行时库和优化库等,可以帮助嵌入式开发者更方便地编写、调试和优化应用程序。 总而言之,ARM Compiler 5是一款可靠且功能强大的编译器,为嵌入式开发者提供了完整的编译和优化工具,有助于提高应用程序的性能和可靠性。 ### 回答2: arm compiler 5是一种专门为ARM架构设计的编译器和开发工具集。在嵌入式系统和移动设备领域,ARM CPU是一种最受欢迎的处理器架构之一。相应的,为该架构设计的工具和库也得到了广泛的应用。 与先前的版本相比,ARM Compiler 5提供了更好的代码生成和优化,支持大量的编译器指令集(如ARM, Thumb和Thumb-2),为开发人员提供了更好的编程体验。 其它值得一提的功能包括: - 对多核处理器的支持 - 带有调试器的全面特性,可与多种IDE集成 - 可以用于各种类型的嵌入式设备的C/C++库 总之,ARM Compiler 5是一种强大的工具,为ARM架构上的开发者提供了极大的帮助和便利。 ### 回答3: ARM Compiler 5是ARM公司开发的一款面向嵌入式系统的编译器,支持多种ARM架构指令集,包括ARMv5、ARMv6、ARMv7和Thumb等。它为开发者提供了一个高效、可靠的编译器,具备优秀的性能、代码大小优化和代码生成的能力。 ARM Compiler 5的主要特点包括: 1. 高效的代码生成。它能够生成高效的代码,减少执行时间和内存占用。 2. 优化代码大小。它能够通过使用优化算法和删除未使用的代码,减小生成文件的大小。 3. 支持多种嵌入式系统。ARM Compiler 5支持多种嵌入式系统的编译,包括Linux、Windows CE和Android等。 4. 内置调试器。ARM Compiler 5内置了调试器,支持多种调试功能,能够提高开发效率。 5. 支持多种编程语言。ARM Compiler 5支持多种编程语言,包括C、C++和汇编语言等。 总之,ARM Compiler 5是一款非常强大的编译器,能够满足开发者对高效、可靠和优化的需求,帮助他们在嵌入式系统开发中获得更好的表现。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

夜流冰

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

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

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

打赏作者

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

抵扣说明:

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

余额充值