我想运行一个只运行几秒钟的 Unix 程序,但不影响执行速度。运行完成后,我想知道它使用了哪些动态(共享)库。
适当的命令是什么?
主要问题是我有少量的 BLAS 实现,并且我想弄清楚每个不同的程序到底使用了哪一个。
答案1
最后,您可以使用 strace。 strace <program_to_execute
它将为您提供大量信息,包括对库的调用。它不像其他答案那么干净,但它是另一种做事的方式。(并且本身就很有用)——
Christopher Karel
答案2
使用LDD您可以看到链接到特定二进制文件的动态库。
就像这样:
$ ldd /usr/bin/wget
linux-vdso.so.1 => (0x00007fffa5dff000)
libssl.so.0.9.8 => /lib/libssl.so.0.9.8 (0x00007f4d3280e000)
libcrypto.so.0.9.8 => /lib/libcrypto.so.0.9.8 (0x00007f4d3247e000)
libdl.so.2 => /lib/libdl.so.2 (0x00007f4d32279000)
librt.so.1 => /lib/librt.so.1 (0x00007f4d32071000)
libc.so.6 => /lib/libc.so.6 (0x00007f4d31cef000)
libz.so.1 => /lib/libz.so.1 (0x00007f4d31ad7000)
/lib64/ld-linux-x86-64.so.2 (0x00007f4d32a73000)
libpthread.so.0 => /lib/libpthread.so.0 (0x00007f4d318ba000)
答案3
除了 ldd 之外,cat /proc/$pid/maps 还会显示哪些库已映射到内存中,包括程序启动后加载的动态库(以及已删除的项目)