下载并编译了glibc-2.13。当我尝试运行一个实例malloc()的示例C程序时。我得到以下错误 elf file OS ABI invalid
glibc:elf文件操作系统ABI无效
可有人请把我的任何指针有帮助解决这个issue.Please注意到,我的内核版本是Linux-2.6.35.9
下载并编译了glibc-2.13。当我尝试运行一个实例malloc()的示例C程序时。我得到以下错误 elf file OS ABI invalid
glibc:elf文件操作系统ABI无效
可有人请把我的任何指针有帮助解决这个issue.Please注意到,我的内核版本是Linux-2.6.35.9
这不是你的内核版本这就是问题所在。
系统上的加载程序不支持新的Linux
ABI。直到最近,Linux ELF二进制文件都使用了ABI的System V
。最近,为了支持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的功能,如果您在意的话。
嘿谢谢mkj。这是一个很好的信息。我刚刚取代了ld-linux.so(基本上,ld-2.13.so),并开始为我工作。万一你很好奇,我的设置就像我创建了一个linux-diskless目标并在虚拟机上运行它。这个问题开始出现在我已经将libc.so.6(glibc-2.9左右)替换为libc.so.6(glibc-2.13)的root-fs中,并且比较了以前的libc.so的OS-ABI。如你所说,它显示了“系统V”,其中较新的那个具有“Linux”。 – Kapil
啊,我没有意识到你已经替换了系统C库而没有更换加载器,或者我会在我的建议中更具体。我假设你正在做一些类似于使用LD_LIBRARY_PATH来加载替代库的方法。很高兴有帮助! – mkj
很可能你的glibc是用--enable-multiarch
标志,强制使用ifunc和新的Linux ABI
从我可以告诉的是--enable-multiarch
是默认设置,你应该通过设置--enable-multiarch=no
禁用它建成。
信息有点短缺。你确定你正在链接和运行该libc吗? – Mat