Назад | Перейти на главную страницу

Как мне выяснить, какие динамические библиотеки загружаются процессом Unix?

Я хочу запустить программу 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 покажет вам, какие библиотеки были отображены в памяти, в том числе динамические, загруженные после запуска программы (а также удаленные элементы).