为什么共享库的ELF头部会将Linux指定为操作系统ABI?

8
在我的Linux系统(Fedora 9)上,所有标准的共享库都将ELFOSABI_NONE(0)指定为它们的OSABI。
这很好 - 但是我从供应商那里收到了一个共享库,其中ELF头中给出的OSABI是ELFOSABI_LINUX(3)。
这似乎不是一个不合理的值,适用于Linux系统的共享库,但它与我所有其他库的值不同 - 因此,当我尝试从我的其他库之一使用dlopen()打开此库时,会出现错误“ELF文件OS ABI无效”。
我编译了FreeBSD实用程序brandelf.c并使用它来更改OSABI类型为0,现在该库在其他所有内容中看起来都可以正常运行。
我只是想知道 - 你认为为什么将此库标记为ELFOSABI_LINUX?我猜可能他们在另一个系统上交叉编译并指定了某个gcc标志,导致将此值设置为ELF头中?我试图实现类似的操作,但无法确定适当的gcc标志。

我想知道可能的原因是什么,因为这个特定的供应商如果没有大量的辅助工作就不会做任何事情,我希望能够说:“你们可能正在做X,但这意味着在我们接收它们之后,我们必须修改你们的库。”

1个回答

4
可能供应商正在FreeBSD上进行交叉编译,或者使用最近的Fedora系统,任何使用STT_GNU_IFUNC的内容都将被标记为ELFOSABI_LINUX。如果您尝试在Linux上使用它,则将其更改为ELFOSABI_NONE就不会有任何问题,就像您所做的那样。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接