er4*_*z0r 47 linux shared-libraries macos
我知道有一个命令列出了软件所链接的库和各自的版本。
有 ld 或 libtool 的东西吗?
但我就是想不起来。在谷歌上花了一些时间,但没有想出任何有用的东西。
更新
ldd <binary>对 linux 有帮助,(来自@ Ernelli),而我发现它otool -L <binary>在 MacOS X 上做了类似的事情。
Ern*_*lli 48
试试 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)
Run Code Online (Sandbox Code Playgroud)
Ric*_*lka 19
要找到它直接需要的东西:
readelf -d APP | grep NEEDED
Run Code Online (Sandbox Code Playgroud)
ldd正如其他地方提到的,将显示所有直接和间接库 - 它在运行时需要的一切。这可能不是一个完整的列表,因为您可以使用 dlopen() 动态打开内容,但这在 99% 的情况下应该有效。
ld 和 libtool 在编译/链接时使用。一旦你有了一个应用程序,它们就没有用了。
编辑我可以从您询问 OSX 的稍后答案中看到,但我想添加到我关于 Linux 工具的答案中:
很久以前我忘了提一件事;你问过版本。既ldd不会也readelf不会回答“什么版本”的问题。他们会告诉您要查找的库的文件名,并且命名约定可能有一些版本信息,但没有强制执行此操作。符号可能是版本化的,你必须使用更低的级别nm才能看到这些,