내가 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와 유사한 도구가 있습니까? LSB를 컴파일러가 작동하기 때문에
나는 그것이 2.6.15/2.6.28-15 차이와 관련이 있다고 생각하지 않습니다
그냥 경우에, 여기의 ELF 동적 섹션$ 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
.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
LSB 인터프리터 (/lib64/ld-lsb-x86-64.so.3)가 시스템에 없습니다. 사실 LSB 전용 인터프리터가 설치해야한다는 것을 모릅니다. LSB SDK의 바이너리가 LSB를 준수하지 않는 것은 재미 있습니다. – math