首页 文章

glibc:elf文件OS ABI无效

提问于
浏览
21

下载并编译了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对象 .

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

  • 1

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

  • 3

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

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

  • 32

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

相关问题