【问题标题】:Source and target have different EABI versions源和目标具有不同的 EABI 版本
【发布时间】:2016-05-12 11:40:10
【问题描述】:

我正在尝试使用 ARM 工具链编译 .so 文件。但是我不断收到此错误-

错误:源对象的 EABI 版本为 0,但目标对象的 EABI 版本为 5

我无法更改工具链中的任何内容,因为我必须使用给定的那个。我以前从未见过这个错误。

我使用了这个编译器标志 -
-Wl,--no-warn-mismatch
但不得不把它拿出来,因为它打破了很多其他的东西。

我使用的编译器标志是:
-fPIC -O2 -marm -march=armv7-a

【问题讨论】:

  • 你没有说哪个工具链或目标操作系统?对于 GCC,您有 -mabi=name,其中名称是 apcs-gnuatpcsaapcsaapcs-linux 之一iwmmxt。虽然听起来你可能没有 ELF 文件或其他东西。试试file test.o 看看你在编译阶段创建了什么类型的文件。我认为 aapcs 是更新的版本(至少它不是版本 zero)。
  • 谷歌搜索一下会得到wiki.debian.org/ArmEabiPort,这可能会有所帮助。
  • 是的,听起来确实像是您试图将 OABI 和 EABI 对象链接在一起(刚刚尝试过,它肯定会产生完全相同的错误)。如何处理它主要取决于您未包含在问题中的所有细节......

标签: arm toolchain eabi


【解决方案1】:

使用as -meabi=5

我不会声称我完全理解它... :-) 但它解决了问题。

我试图做的事情失败了:

  • 使用 GNU AS 组装,从 4de5434b694fc260d02610e8e7fec21b2923600a 的 master 编译,配置为 --target arm-elf
  • 链接 Ubuntu 16.04 arm-linux-gnueabihf-gcc 5.3.1 版

我认为 EABI 规范中提到的值对此有所说明http://infocenter.arm.com/help/topic/com.arm.doc.ihi0044f/IHI0044F_aaelf.pdf

表 4-2,ARM 特定的 e_flags

这掩盖了一个 8 位的版本号,即此 ABI 的版本 ELF 文件符合。此 ABI 是版本 5。值 0 表示未知 一致性。

虽然我完全不知道为什么会出现 0。

【讨论】:

    猜你喜欢
    • 2014-02-27
    • 2012-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-01
    • 2015-09-27
    相关资源
    最近更新 更多