c++ - 如何在 X86 PC 上为 arm 编译 gcc 编译器

标签 c++ c gcc arm

我正在使用 zedboard,我知道如果我想为 ARM 设备编译程序,我需要一个在 x86 下运行并为 ARM 编译(交叉编译)的特殊版本的 gcc,我想知道是否有可能在 x86 上从源代码编译 gcc(将在 ARM 上使用),以及如何,我不知道如何配置它。

最佳答案

这是一项艰巨但可行的任务。

这取决于您编译的 ARM 系列。 在许多系统上,您会发现运行“迷你 Linux 发行版”的 Cortex-A(armv7-a 或更高版本)或 ARM11 (armv6) 处理器,许多 POS(销售点)设备就是这种情况。在这种情况下,您的目标可以是以下之一:

  • arm-linux-gnueabi
  • arm-linux-gnueabihf

其中hf代表hard-float,意思是CPU有一个FPU(浮点单元),所有Cortex-A都支持这个,但也取决于底层操作系统。了解嵌入式 Linux 上的 glibc 版本也很重要,因为如果编译器和操作系统之间的版本不同,可能会出现意外行为。

如果您针对没有 MMU(Memory Magament Unit)的 ARM 处理器(如 Cortex-R 或 Cortex-M 系列)进行编译,并且因此不支持 Linux(仅支持 FreeRTOS 等微内核),您的目标将是(也称为作为裸机):

  • arm-none-eabi

ARM 现在分发 GCC 的二进制文件:

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

之前是 Linaro。然而,如果您需要,他们会为 arm-linu-gnueabi(soft-float)保留 GCC 7.x。

https://releases.linaro.org/components/toolchain/binaries/latest-7/

Linaro 还使用了一个称为 ABE 的构建系统,我没有找到太多关于它的文档,但他们用它来配置和构建他们分发的工具链。

如果以上都不适合您,您仍然可以构建自己的工具链,为此我建议使用 crosstool-ng: https://crosstool-ng.github.io/

在像 Ubuntu 这样的 Linux 操作系统下效果最好(您仍然可以尝试使用 Cygwin 在 Windows 上构建它,但可能需要更多时间)。请注意,您不需要在要运行它的机器上编译它,这意味着您可以在 Ubuntu 上编译将在 Windows 上运行的 GCC,这将生成在 ARM 处理器上运行的程序,这被称为 Canadian Cross。

关于c++ - 如何在 X86 PC 上为 arm 编译 gcc 编译器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44340050/

相关文章:

c++ - 通用随机数生成

gcc - 无法编译: unrecognized relocation 0x2a in section text

linux - 不支持配置 arm-unknown-elf - ARM 工具链

c++ - 排序二维数组 C++

c++ - 通过代理使用 C++/Boost 执行简单的 HTTP 请求?

c++ - 如何注入(inject)模拟对象?

c - Flex C 执行文件

c - 在 C 中扩展矩阵

c - 写入 I/O 地址

c++ - vs2017 输出错误但 mingw 有效