如何确定 Unix 进程加载了哪些动态库?

如何确定 Unix 进程加载了哪些动态库?

我想运行一个只运行几秒钟的 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 还会显示哪些库已映射到内存中,包括程序启动后加载的动态库(以及已删除的项目)

相关内容