+ -
当前位置:首页 → 问答吧 → /usr/lib/libc.so.1: bad ELF interpreter错误

/usr/lib/libc.so.1: bad ELF interpreter错误

时间:2011-04-21

来源:互联网

这是自己写的一个链接脚本,保存为ld.script
OUTPUT_FORMAT("elf32-i386", "elf32-i386", "elf32-i386")
OUTPUT_ARCH(i386)
ENTRY(Test)
SEARCH_DIR("/usr/local/i686-pc-linux-gnu/lib"); SEARCH_DIR("/usr/local/lib"); SEARCH_DIR("/lib"); SEARCH_DIR("/usr/lib");
SECTIONS{
. = 0x08048000;

.text :{ *(.text) *(.rdata) }

.data :{*(.data)}

.bss :{ *(.bss)}

.interp : { *(.interp) }

/DISCARD/ : { *(.comment)}
}
在链接的时候:
ld -T ld.script -o t t.o -lc

执行时出错:
bash: ./t: /usr/lib/libc.so.1: bad ELF interpreter: No such file or directory

查看信息
readelf -l t
发现,interpreter变成了/usr/lib/libc.so.1:
INTERP 0x001118 0x08048118 0x08048118 0x00013 0x00013 R 0x1
  [Requesting program interpreter: /usr/lib/libc.so.1]
正常情况应该是:
/lib/ld-linux.so.2

请问为什么会变成/usr/lib/libc.so.1?

如何修改?

作者: wyjie1987   发布时间: 2011-04-21

ld -m elf_i386 -dynamic-linker /lib/ld-linux.so.2 -o swap.out main.o swap.o /usr/lib/crt1.o /usr/lib/crti.o /usr/lib/gcc/i686-redhat-linux/4.5.1/crtbegin.o /usr/lib/libc.so /usr/lib/gcc/i686-redhat-linux/4.5.1/crtend.o /usr/lib/crtn.o

-dynamic-linker /lib/ld-linux.so.2 把这个选项加上 就能解决你现在的这个问题

作者: zhqhzhqh   发布时间: 2011-08-07