在我的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标志。
这很好 - 但是我从供应商那里收到了一个共享库,其中ELF头中给出的OSABI是ELFOSABI_LINUX(3)。
这似乎不是一个不合理的值,适用于Linux系统的共享库,但它与我所有其他库的值不同 - 因此,当我尝试从我的其他库之一使用dlopen()打开此库时,会出现错误“ELF文件OS ABI无效”。
我编译了FreeBSD实用程序brandelf.c并使用它来更改OSABI类型为0,现在该库在其他所有内容中看起来都可以正常运行。
我只是想知道 - 你认为为什么将此库标记为ELFOSABI_LINUX?我猜可能他们在另一个系统上交叉编译并指定了某个gcc标志,导致将此值设置为ELF头中?我试图实现类似的操作,但无法确定适当的gcc标志。
我想知道可能的原因是什么,因为这个特定的供应商如果没有大量的辅助工作就不会做任何事情,我希望能够说:“你们可能正在做X,但这意味着在我们接收它们之后,我们必须修改你们的库。”