Wie kann ich herausfinden, welche ELF Abhängigkeit nicht erfüllt?
Habe ich baute ein test ELFE-Programm mit dem LSB-SDK (Hinweis, dass meine Frage nicht spezifisch für LSB):
$ /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
Aber ich bin nicht in der Lage, um es zu starten (ja, ich versichere Ihnen, die Datei ist in das Verzeichnis...):
$ ./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
Ich denke, es ist eine ELFE die Abhängigkeit nicht erfüllen, aber ich weiß nicht, wie es zu finden. Gibt es ein tool, ähnlich wie ldd für Bibliotheken, die verwendet werden können zu finden das fehlende Glied?
Ich glaube nicht, dass es im Zusammenhang mit der 2.6.15/2.6.28-15 Unterschied, weil die LSB-compiler arbeitet:
$ 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
Just in case, hier ist der ELF dynamische Abschnitt ein.aus:
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
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dieser aussieht, was passiert, wenn die ELF-interpreter fehlt.
Sicherzustellen, dass
/lib/ld-lsb.so.2
(oder ähnlich, variiert von LSB-version und-Architektur) vorhanden ist.ldd
undreadelf -l
werden können, zeigen die ELF-interpreter die ausführbare Datei anfordert.(
lsbcc
(oder etwas in der LSB-toolchain), überschreibt das system die Standard -/lib/ld-linux.so.2
, wahrscheinlich durch die übergabe-Wl,--dynamic-linker=/lib/ld-lsb.so.2
für den compiler, aus Gründen, die ich denke, sind eher albern (Glibc hat immer wieder ziemlich ausgezeichnete rückwärts-Kompatibilität hier), aber dort haben Sie es.)