【问题标题】:How and when to use -mbig-endian gcc option on AArch64?如何以及何时在 AArch64 上使用 -mbig-endian gcc 选项?
【发布时间】:2019-04-30 09:02:56
【问题描述】:

我尝试在 AArch64(具有小端字节序配置的 Raspberry Pi 3 Model B)上使用-mbig-endian gcc 选项,目的是以大端字节序读取和写入内存。我收到以下错误,编译终止。

/usr/include/gnu/stubs.h:11:11: fatal error: gnu/stubs-lp64_be.h: No such file or directory `#include <gnu/stubs-lp64_be.h>`

我实际上去了那个文件夹,但找不到那个文件。我错过了什么吗?

gcc 在线文档说-mbig-endian 选项生成大端代码。这到底是什么意思?

【问题讨论】:

    标签: gcc arm64


    【解决方案1】:

    您没有遗漏任何东西,但似乎甚至 ARM 提供的 gcc 工具链都不允许将 -mbig-endianaarch64-linux-gnu-gcc 一起使用,也不允许将 -mlittle-endianaarch64_be-linux-gnu-gcc 一起使用:在这两种情况下,与 .h 文件相关将丢失“外星人”字节序。

    这可能意味着您应该只使用 aarch64_be-linux-gnu-gcc 来交叉编译 big-endian aarch64 Linux 可执行文件。但是您仍然无法在 little-endian aarch64 Linux 系统上运行这些可执行文件。

    【讨论】:

    • 感谢您的回复。是的,你的回答很有道理。我想知道-mbig-endian 选项的确切作用。
    • 根据文档,正如您所怀疑的那样,它确实是generate big endian code。它是 aarch64_be-linux-gcc 的默认值,但 ARM 提供的 aarch64-linux-gnu-gcc 8.3 不支持它。
    • 我不确定什么是大端代码。我的猜测是大端代码以大端字节顺序存储在内存中。在这种情况下,数据访问也会是大端的吗?
    • 是的,在这种情况下,数据访问也是大端的,就像 ppc64 平台一样。
    猜你喜欢
    • 2020-11-15
    • 2018-09-27
    • 2015-01-16
    • 1970-01-01
    • 2014-09-10
    • 2017-03-16
    • 2014-08-26
    • 2020-03-05
    相关资源
    最近更新 更多