下载并编译了glibc-2.13 . 当我尝试运行一个执行malloc()的示例C程序时 . 我收到以下错误 elf file OS ABI invalid
任何人都可以通过我的任何指针帮助解决这个问题 . 请注意我的内核版本是linux-2.6.35.9
4 回答
3
这不是你的内核版本的问题 .
系统上的加载程序不支持新的 Linux ABI . 直到最近,Linux ELF二进制文件才使用 System V ABI . 最近,为了支持STT_GNU_IFUNC,添加了 Linux ABI . 您必须更新 system C库以使其具有支持STT_GNU_IFUNC的加载程序,然后它还将识别具有 Linux ABI类型的ELF对象 .
4 回答
这不是你的内核版本的问题 .
系统上的加载程序不支持新的
Linux
ABI . 直到最近,Linux ELF二进制文件才使用System V
ABI . 最近,为了支持STT_GNU_IFUNC,添加了Linux
ABI . 您必须更新 system C库以使其具有支持STT_GNU_IFUNC的加载程序,然后它还将识别具有Linux
ABI类型的ELF对象 .如果您愿意,请参阅Dave Miller's blog entry on STT_GNU_IFUNC for Sparc以了解STT_GNU_IFUNC的作用 .
你的glibc可能是用
--enable-multiarch
标志构建的,强制使用ifunc和新的LINUX ABI如果您从较新的系统中获取装载机,则可以使用它来使其工作 . 但无论你的程序走到哪里,你都必须携带装载机 . 您可以编译您的程序以使用该加载程序,如here所述,或者编译您的程序并稍后使用patchelf对其进行修补,方式类似于我提到的here . 我能够通过从其他地方复制ld-2.15.so来运行一个程序,该程序在Linux 2.6.18(比你的更早)上给出了
OS ABI invalid
错误,该程序有ld-2.5.so .注意:执行 NOT 覆盖系统ld * .so或ld-linux . ; - /
据我所知,
--enable-multiarch
是默认设置,你应该通过设置--enable-multiarch=no
来禁用它 .