可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
downloaded and compiled glibc-2.13. when i try to run a sample C program which does a malloc(). I get following error elf file OS ABI invalid
Can anybody please pass my any pointer helpful in resolving this issue.Please note that my kernel version is linux-2.6.35.9
回答1:
It's not your kernel version that's the problem.
The loader on your system does not support the new Linux
ABI. Until relatively recently, Linux ELF binaries used the System V
ABI. Recently, in support of STT_GNU_IFUNC, the Linux
ABI was added. You would have to update your system C library to have a loader that support STT_GNU_IFUNC, and then it will also recognize ELF objects with the Linux
ABI type.
See Dave Miller's blog entry on STT_GNU_IFUNC for Sparc to gain an understanding of what STT_GNU_IFUNC does, if you care.
回答2:
It is possible your glibc was built with the --enable-multiarch
flag that forced using ifunc and new LINUX ABI
回答3:
From what I can tell is that --enable-multiarch
is the default setting and you should disable it by setting --enable-multiarch=no
.
回答4:
If you get your hands in the loader from a newer system, you might be able to make it work using that. But you'll have to carry the loader wherever your program go. You can either compile your program to use that loader as explained here, or compile your program and patch it later using patchelf, in a way similar to what I mention here. I was able to run a program that was giving me the OS ABI invalid
error on a linux 2.6.18 (older than yours) that had ld-2.5.so, by copying a ld-2.15.so from somewhere else.
NOTE: do NOT overwrite your system ld*.so or ld-linux. ;-/