glibc:elf文件OS ABI无效

时间:2011-10-04 12:23:30

标签: linux linux-kernel glibc abi

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

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

4 个答案:

答案 0 :(得分:32)

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

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

如果您愿意,请参阅Dave Miller's blog entry on STT_GNU_IFUNC for Sparc以了解STT_GNU_IFUNC的作用。

答案 1 :(得分:3)

你的glibc可能是用强制使用ifunc和新LINUX ABI的--enable-multiarch标志构建的。

答案 2 :(得分:3)

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

注意: NOT 覆盖系统ld * .so或ld-linux。 ; - /

答案 3 :(得分:1)

据我所知,--enable-multiarch是默认设置,您应该通过设置--enable-multiarch=no来禁用它。