Answers:
试试ldd binary-exec
例:
~$ ldd /bin/bash
linux-gate.so.1 => (0x00606000)
libncurses.so.5 => /lib/libncurses.so.5 (0x00943000)
libdl.so.2 => /lib/tls/i686/cmov/libdl.so.2 (0x00c5d000)
libc.so.6 => /lib/tls/i686/cmov/libc.so.6 (0x003e9000)
/lib/ld-linux.so.2 (0x00a41000)
要查找直接需要的内容:
readelf -d APP | grep NEEDED
ldd
如在其他地方提到的,它将显示所有直接和间接库-运行时所需的一切。这可能不是一个完整的列表,因为您可以使用dlopen()动态打开内容,但这应该有99%的时间起作用。
ld和libtool在编译/链接时使用。一旦您有了应用程序,它们就没有用了。
编辑我可以在以后询问您有关OSX的答案中看到,但是我想在Linux工具上添加我的答案:
很久以前,我忘了提到一件事。您询问版本。无论是ldd
还是readelf
会回答“是什么版本”的问题。他们会告诉您要查找的库的文件名,命名约定可能包含一些版本信息,但是没有任何内容可以强制执行此操作。符号可能已经过版本控制,您可能需要花更多的时间nm
才能看到这些符号,