为什么共享库的ELF标头指定Linux作为OSABI?

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

这很好 – 但是我收到了ELF头文件中给出的OSABI为ELFOSABI_LINUX(3)的共享库。

这对于一个用于Linux系统的共享库来说听起来并不合理,但是对于我的其他所有库来说这是一个不同的值 – 所以当我试图用dlopen()打开这个库时,我的其他库的这个失败,错误“ELF文件操作系统ABI无效”。

我编译了FreeBSD实用程序brandelf.c,并使用它将OSABItypes更改为0,现在该库似乎可以与其他所有程序一起使用。

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

我想知道可能的原因是什么,因为这个特定的供应商不会做任何事情,没有很多的手,我想能够说“你可能在做X,但这意味着我们必须修改你的库我们接受了他们之后“。

Solutions Collecting From Web of "为什么共享库的ELF标头指定Linux作为OSABI?"

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