type
status
date
Jun 21, 2023 09:35 AM
slug
summary
tags
category
icon
password
结论
- 主流的交叉编译器还是Linaro公司的,下载链接在最后. 虽然官网说要转给 arm维护,但还没有
- Linaro 公司一般有针对不同arm平台提供不同的编译软件套件.
- 但专门对 raspberry 优化了一个版本
gcc-linaro-arm-linux-gnueabihf-raspbian-x64
. raspberry build
眼花缭乱的各种交叉编译器怎么选
工具链的种类
GCC 的命名规则为: arch [-vendor] [-os] [-(gnu)eabi]-gcc
比如
arm-linux-gnueabi-gcc
,arm-none-eabi-gcc
, aarch64-linux-gnu-gcc
- 带 [] 的是可选部分。
- arch: 芯片架构,比如 32 位的 Arm 架构对应的 arch 为 arm,64 位的 Arm 架构对应的 arch 为 aarch64。
- vendor :工具链提供商,大部分工具链名字里面都没有包含这部分。
- os :编译出来的可执行文件(目标文件)针对的操作系统,比如 Linux。
arm-none-eabi-gcc 一般适用用于 Arm Cortex-M/Cortex-R 平台,它使用的是 newlib 库。
arm-linux-gnueabi-gcc 和 aarch64-linux-gnu-gcc 适用于 Arm Cortex-A 系列芯片,前者针对 32 位芯片,后者针对 64 位芯片,它使用的是 glibc 库。可以用来编译 u-boot、linux kernel 以及应用程序。
arm 和 aarch64 区别
ARM 和 AArch64 是两种不同的处理器架构,它们都由 ARM 公司设计。
ARM: 这是一个采用 RISC (Reduced Instruction Set Computing) 设计原则的处理器架构,广泛应用于嵌入式系统和移动设备,如智能手机和平板电脑。ARM 架构的处理器主要使用 32 位指令集。
AArch64: 也被称为 ARM64,这是 ARM 公司设计的 64 位处理器架构。相比于 ARM(也被称为 AArch32),AArch64 提供了更多的通用寄存器,支持更大的内存地址空间,以及更丰富的指令集等优势。这使得 AArch64 更适合需要处理大量数据和高性能计算的应用场景。
简单来说,ARM 和 AArch64 的主要区别在于它们支持的指令集宽度(32 位 vs 64 位)以及与此相关的一些性能和功能差异。
gcc-aarch64-linux-gnu cpp-aarch64-linux-gnu 有什么区别
在GCC工具链中,
gcc-aarch64-linux-gnu
和cpp-aarch64-linux-gnu
分别是GNU C编译器和GNU C预处理器的交叉编译版本。gcc-aarch64-linux-gnu
是针对ARM64(aarch64)架构的Linux系统的GNU C编译器的交叉编译版本。它可以在不同架构的主机(例如,x86)上编译目标为ARM64架构的Linux系统的C代码。
cpp-aarch64-linux-gnu
是针对ARM64(aarch64)架构的Linux系统的GNU C预处理器的交叉编译版本。C预处理器是编译过程的第一步,它处理源代码中的预处理指令,如宏定义(#define)和包含文件(#include)。
在大多数情况下,当你使用
gcc-aarch64-linux-gnu
编译C代码时,cpp-aarch64-linux-gnu
会在背后自动被调用来处理预处理阶段。U
gcc-arm-linux-gnueabihf
和 gcc-arm-linux-gnueabi
有什么区别
这两个都是用于 ARM 平台的 GCC 交叉编译器。他们的区别主要在于用于生成的代码和库的 ARM 浮点硬件的类型和设置。具体来说:
gcc-arm-linux-gnueabi
:这个编译器用于 ARM 平台,没有硬件浮点单元(FPU)的设备,或者代码不打算使用硬件 FPU 的设备。这种情况下,所有的浮点运算都会在软件中实现,这通常会比硬件实现慢一些。
gcc-arm-linux-gnueabihf
:这个编译器用于 ARM 平台,具有硬件浮点单元(FPU)的设备,且打算在代码中使用硬件 FPU 的设备。"hf" 在 "gnueabihf" 中代表 "hard float",意味着它会生成使用 ARM 的硬件浮点运算指令的代码。
选择哪个编译器主要取决于你的 ARM 设备是否有硬件 FPU,以及你的代码是否打算利用这个硬件 FPU。如果你的 ARM 设备有硬件 FPU,并且你希望你的代码能更快地运行,那么你可能会选择
gcc-arm-linux-gnueabihf
。如果你的 ARM 设备没有硬件 FPU,或者你不关心代码的浮点运算速度,那么你可能会选择 gcc-arm-linux-gnueabi
。U
gcc-arm-linux-gnueabihf 和 gcc-arm-eabihf 区别
gcc-arm-linux-gnueabihf
和 gcc-arm-eabihf
是针对不同类型的 ARM 系统的 GCC 交叉编译器。主要的区别在于它们针对的目标系统和操作系统。gcc-arm-linux-gnueabihf
:这个编译器是为运行 Linux 的 ARM 系统设计的。它的目标是具有硬件浮点单元(FPU)的 ARM 设备,并且打算在代码中使用硬件 FPU。这种类型的编译器生成的是 Linux 特定的代码和二进制文件,通常包含对 Linux 操作系统特性的调用和链接。
gcc-arm-eabihf
:这个编译器是为裸机(没有操作系统)或者实时操作系统(RTOS)的 ARM 系统设计的。它的目标也是具有硬件浮点单元(FPU)的 ARM 设备,并且打算在代码中使用硬件 FPU。不过这种类型的编译器生成的代码和二进制文件通常不依赖具体的操作系统。
选择哪个编译器主要取决于你的 ARM 设备是否运行 Linux 操作系统,以及你的代码是否需要依赖 Linux 的特性和功能。如果你的 ARM 设备运行 Linux,那么你可能会选择
gcc-arm-linux-gnueabihf
。如果你的 ARM 设备是裸机或者运行 RTOS,那么你可能会选择 gcc-arm-eabihf
。U
`gcc-linaro-arm-linux-gnueabihf-raspbian-x64` 和 `gcc-arm-linux-gnueabihf` 有什么区别
gcc-linaro-arm-linux-gnueabihf-raspbian-x64
和 gcc-arm-linux-gnueabihf
都是用于 ARM 平台的 GCC 交叉编译器,它们都支持硬浮点(hard float)指令集,适合运行 Linux 操作系统的 ARM 设备。然而,它们主要的区别在于它们的构建环境和目标平台:gcc-linaro-arm-linux-gnueabihf-raspbian-x64
: 这个编译器是 Linaro 团队针对 Raspberry Pi 设备特别构建的。Linaro 是一个专门优化 ARM 架构的开源软件的公司,他们发布的 GCC 编译器常常包含针对特定 ARM 硬件的优化。该编译器使用的是 Raspbian (Raspberry Pi 设备上的 Debian 分支)作为目标平台,并且是在 x64 架构的机器上编译的。
gcc-arm-linux-gnueabihf
: 这是一个通用的交叉编译器,它可以用于生成适合运行在任何采用 ARM v7 架构(或更高)且拥有硬浮点单元的 Linux 系统的代码。它并未特别针对任何特定的 ARM 硬件进行优化。
所以选择哪个编译器主要依赖于你的目标平台。如果你的目标平台是 Raspberry Pi 设备,那么你可能会选择
gcc-linaro-arm-linux-gnueabihf-raspbian-x64
,因为它包含了针对这种设备的优化。如果你的目标平台是其他的 ARM 设备,那么你可能会选择 gcc-arm-linux-gnueabihf
。gcc-arm-linux-gnueabihf 的安装使用(对通用的 arm 32 版本)
我们都知道 Ubuntu 有一个专门用来安装软件的工具 apt,我们可以用它来全自动安装 arm-linux-gcc。
此方法安装的是最新版的,如果你要安装的是某一特定版本的不推荐此方法!还要注意这个需要使用国内的 apt 软件源服务器,如果此方法不行的话就用方法二:
首先 Ctrl+Alt+T 弹出终端,使用如下命令进行 arm-linux-gcc 的安装:
使用如下命令进行 arm-linux-g++ 的安装:
如果要卸载时使用如下命令进行移除,arm-linux-gcc 的卸载:
arm-linux-g++ 的卸载:
确认用 apt 安装的版本:
从上述绿框信息看, 还是 Linaro 7.5.0 版本的.
也就是说并没有转到 arm 公司那边.
( Linaro 官网提供的arm 公司那边链接,目前# 2023-06-08T22:10:55+0800 没有 linux 版本, 只有 none 版本.)
Ubuntu 18.04 安装 arm-linux-gcc 交叉编译器(超简单,附安装包下载地址)_安装交叉编译器_难搞哦~ 的博客 - CSDN 博客linux 安装配置交叉编译器 arm-linux-gnueabi-gcc一次搞定 Arm Linux 交叉编译 - 极术社区 - 连接开发者与智能计算生态