Я хочу запустить программу Unix, которая работает в течение нескольких секунд, не жертвуя скоростью выполнения. После того, как это будет сделано, я хотел бы знать, какие динамические (общие) библиотеки он использовал.
Какая команда подходит?
Основная проблема в том, что у меня есть несколько реализаций BLAS, и я хочу точно выяснить, какая из них используется каждой из нескольких различных программ.
С помощью 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)
Наконец, вы можете использовать strace. strace <program_to_execute
предоставит вам массу информации, включая вызовы библиотек. Это не так чисто, как другие ответы, но это другой способ сделать что-то. (и полезен сам по себе)
- Кристофер Карел
Помимо ldd, cat / proc / $ pid / maps покажет вам, какие библиотеки были отображены в памяти, в том числе динамические, загруженные после запуска программы (а также удаленные элементы).