glibc:elf文件OS ABI无效

Kap*_*pil 21 linux glibc abi linux-kernel

下载并编译了glibc-2.13.当我尝试运行一个执行malloc()的示例C程序时.我得到以下错误 elf file OS ABI invalid

任何人都可以通过我的任何指针帮助解决这个问题.请注意我的内核版本是linux-2.6.35.9

mkj*_*mkj 32

这不是你的内核版本的问题.

系统上的加载程序不支持新的LinuxABI.直到最近,Linux ELF二进制文件才使用System VABI.最近,为了支持STT_GNU_IFUNC,Linux增加了ABI.您必须更新系统 C库以使其具有支持STT_GNU_IFUNC的加载程序,然后它还将识别具有LinuxABI类型的ELF对象.

如果您关心的话,请参阅Dave Miller关于Sparc STT_GNU_IFUNC的博客文章,以了解STT_GNU_IFUNC的作用.

  • 嘿,谢谢 mkj。这是一个很好的信息。我刚刚替换了 ld-linux.so(基本上是 ld-2.13.so),事情开始对我有用。以防万一您好奇,我的设置就像我创建了一个 linux 无盘目标并在虚拟机上运行它。当我在 root-fs 中将 libc.so.6(glibc-2.9 左右)替换为 libc.so.6(glibc-2.13)时,问题开始出现。并比较以前的 libc.so 的 OS-ABI。 6 它显示“系统 V”,其中较新的有“Linux”,正如您所说。 (2认同)

msb*_*msb 6

如果您从较新的系统中接触到加载程序,您也许可以使用它来使其工作。但是无论您的程序走到哪里,您都必须携带加载程序。您可以按照此处的说明编译您的程序以使用该加载程序,或者编译您的程序并稍后使用 patchelf 对其进行修补,其方式与我在此提到的类似。OS ABI invalid通过从其他地方复制 ld-2.15.so,我能够在具有 ld-2.5.so 的 linux 2.6.18(比你的版本更旧)上运行一个程序,该程序给我带来了错误。

注意:不要覆盖您的系统 ld*.so 或 ld-linux。;-/