【问题标题】:Why I cannot compile ARM BE8 ELF using GCC?为什么我不能使用 GCC 编译 ARM BE8 ELF?
【发布时间】:2019-10-06 14:41:36
【问题描述】:

我一直在尝试为 ARM BE8 系统编译以下代码(运行具有大端数据访问的小端代码)。

我的代码如下:

.global main
.type main, %function

main:
    ldr pc, =0x12345678

预期的输出是:

04 f0 1f e5 <- little endian opcode
12 34 56 78 <- big endian data

我正在使用 Makefile,首先尝试编译使用:

arm-unknown-linux-musleabi-gcc main.S -o main.o -mbig-endian -mbe8

然后,使用链接:

arm-unknown-linux-musleabi-ld main.o -o main -mbig-endian

但输出二进制 main 包含大端代码而不是小端代码。

尝试链接时使用:

arm-unknown-linux-musleabi-ld main.o -o main -mbig-endian -mbe8

我收到以下错误:

... is already in final BE8 format

【问题讨论】:

  • 较旧的 arm 内核不支持 be8,只支持较新的,因此请尝试指定 armv7 架构。看看这是否会改变它和/或确定你在这个 gnu 二进制文件中设置的默认核心

标签: gcc compiler-errors arm cross-compiling endianness


【解决方案1】:

我发现问题了!

发布问题时,我尝试简化原始Makefile 中的构建行。实际问题是尝试多次运行ld(为我的最终ELF 生成多种类型)。

-mbe8 似乎无法对具有-be8 属性的现有 ELF 文件进行操作(重新链接)。

将此标志仅传输到最终ld 命令的解决方案。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-23
    • 2016-02-08
    • 2012-02-11
    • 1970-01-01
    • 1970-01-01
    • 2019-07-18
    相关资源
    最近更新 更多