【发布时间】: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