为什么共享库的ELF头会将Linux指定为OSABI?

为什么共享库的ELF头会将Linux指定为OSABI?,linux,shared-libraries,elf,abi,Linux,Shared Libraries,Elf,Abi,我的Linux系统(Fedora 9)上的所有标准共享库都将ELFOSABI_NONE(0)指定为它们的OSABI 这很好-但是我从一家供应商那里收到了一个共享库,其中ELF头中给出的OSABI是ELFOSABI_LINUX(3) 对于Linux系统的共享库来说,这听起来并不是一个不合理的值,但是它与我的所有其他库的值不同——因此,当我尝试使用dlopen()从我的其他库之一打开此库时,它会失败,错误为“ELF file OS ABI invalid” 我编译了FreeBSD实用程序,并使用它将

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

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

对于Linux系统的共享库来说,这听起来并不是一个不合理的值,但是它与我的所有其他库的值不同——因此,当我尝试使用dlopen()从我的其他库之一打开此库时,它会失败,错误为“ELF file OS ABI invalid”

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

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


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

供应商可能正在FreeBSD上交叉编译,或使用最新的Fedora系统,其中任何使用STT_GNU_IFUNC的系统都将标记为ELFOSABI_LINUX。如果您试图在Linux上使用它,那么将其更改为ELFOSABI_NONE应该不会有任何问题