2009-10-13 51 views
8

我已经建立了使用LSB SDK测试程序ELF(注意,我的问题是不特定于LSB):我怎样才能找到不符合ELF的依赖关系?

$ /opt/lsb/bin/lsbcc tst.c 
$ ls -l a.out 
-rwxr-xr-x 1 math math 10791 2009-10-13 20:13 a.out 
$ file a.out 
a.out: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.15, not stripped 

但我无法启动它(是的,我向你保证文件是在目录 ...):

$ ./a.out 
bash: ./a.out: No such file or directory 

$ uname -a 
Linux math 2.6.28-15-generiC#52-Ubuntu SMP Wed Sep 9 10:48:52 UTC 2009 x86_64 GNU/Linux 

我觉得这是一个ELF依赖未履行,但我不知道如何找到它。是否有类似于ldd的工具可用于找到缺失的链接?

我不认为这是关系到2.6.15/2.6.28-15区别,因为LSB编译器工作:

$ file /opt/lsb/bin/lsbcc 
/opt/lsb/bin/lsbcc: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.4, not stripped 

以防万一,这里是一个ELF的动态部分.out:

0x0000000000000001 (NEEDED)    Shared library: [libpthread.so.0] 
0x0000000000000001 (NEEDED)    Shared library: [libm.so.6] 
0x0000000000000001 (NEEDED)    Shared library: [libc.so.6] 
0x000000000000000c (INIT)    0x400428 
0x000000000000000d (FINI)    0x400638 
0x0000000000000004 (HASH)    0x400278 
0x0000000000000005 (STRTAB)    0x400350 
0x0000000000000006 (SYMTAB)    0x4002a8 
0x000000000000000a (STRSZ)    121 (bytes) 
0x000000000000000b (SYMENT)    24 (bytes) 
0x0000000000000015 (DEBUG)    0x0 
0x0000000000000003 (PLTGOT)    0x600fe8 
0x0000000000000002 (PLTRELSZ)   24 (bytes) 
0x0000000000000014 (PLTREL)    RELA 
0x0000000000000017 (JMPREL)    0x400410 
0x0000000000000007 (RELA)    0x4003f8 
0x0000000000000008 (RELASZ)    24 (bytes) 
0x0000000000000009 (RELAENT)   24 (bytes) 
0x000000006ffffffe (VERNEED)   0x4003d8 
0x000000006fffffff (VERNEEDNUM)   1 
0x000000006ffffff0 (VERSYM)    0x4003ca 
0x0000000000000000 (NULL)    0x0 

回答

11

这看起来像是当ELF解释器丢失时会发生什么。

确保/lib/ld-lsb.so.2(或类似;因LSB版本和架构而异)存在。 lddreadelf -l将能够显示您的可执行文件请求的ELF解释器。

lsbcc(或LSB工具链的东西)覆盖系统的默认/lib/ld-linux.so.2,可能通过传递-Wl,--dynamic-linker=/lib/ld-lsb.so.2到了编译器的原因,我认为是相当愚蠢的(Glibc的一贯提供相当出色的位置向后兼容),但有你有它。)

+0

就是这样,我没有系统上的LSB解释器(/lib64/ld-lsb-x86-64.so.3)。事实上,我不知道我需要安装一个LSB​​特定解释器...... 有趣的是,LSB SDK中的二进制文件不符合LSB标准。 – math 2009-10-13 21:17:39

相关问题