22

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

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

4

4 回答 4

34

问题不是你的内核版本。

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

请参阅Dave Miller 关于 STT_GNU_IFUNC for Sparc 的博客条目(已存档),了解 STT_GNU_IFUNC 的作用,如果您关心的话。

于 2011-10-04T16:52:29.770 回答
5

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

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

于 2018-02-07T01:39:23.580 回答
3

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

于 2012-01-25T11:16:41.533 回答
1

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

于 2016-04-14T13:59:35.447 回答