【问题标题】:Why would the ELF header of a shared library specify Linux as the OSABI?为什么共享库的 ELF 标头会将 Linux 指定为 OSABI?
【发布时间】:2011-01-02 12:28:29
【问题描述】:

我的 Linux 系统 (Fedora 9) 上的所有标准共享库都将 ELFOSABI_NONE (0) 指定为它们的 OSABI。

这很好 - 但是我从供应商那里收到了一个共享库,其中 ELF 标头中给出的 OSABI 是 ELFSABI_LINUX (3)。

听起来对于用于 Linux 系统的共享库来说并不是一个不合理的值,但是它与我所有其他库的值不同 - 所以当我尝试打开这个库,使用 dlopen(),来自我的其他库之一,失败并出现错误“ELF 文件 OS ABI 无效”。

我编译了 FreeBSD 实用程序 brandelf.c 并用它来将 OSABI 类型更改为 0,现在库 似乎 可以很好地处理其他所有内容。

我只是想知道 - 为什么你认为这个库被标记为 ELFOSABI_LINUX?我猜也许他们在另一个系统上交叉编译并指定了一些 gcc 标志,导致这个值被设置到 ELF 标头中?我试图实现类似的目标,但无法确定合适的 gcc 标志。

我想知道可能的原因是什么,因为这个特定的供应商不会在没有大量帮助的情况下做任何事情,我想能够说“你可能正在做 X,但这意味着我们必须在我们收货后修改您的库”。

【问题讨论】:

    标签: linux shared-libraries elf abi


    【解决方案1】:

    可能供应商在 FreeBSD 上进行交叉编译或使用最新的 Fedora 系统,其中任何使用 STT_GNU_IFUNC 的东西都将被标记为 ELFSABI_LINUX。如果您尝试在 Linux 上使用它,则像您所做的那样将其更改为 ELFOSABI_NONE 应该没有问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-01-14
      • 2014-08-04
      • 2011-10-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-04
      • 1970-01-01
      相关资源
      最近更新 更多