Como descubro quais bibliotecas dinâmicas são carregadas por um processo Unix?

1

Eu quero rodar um programa Unix que funcione por alguns segundos, sem sacrificar a velocidade de execução. Depois disso, gostaria de saber quais bibliotecas dinâmicas (compartilhadas) ele usava.

Qual é o comando apropriado?

O principal problema é que eu tenho um punhado de implementações BLAS, e eu quero descobrir exatamente qual delas está sendo usada por cada um de um punhado de programas diferentes.

    
por Joseph Turian 23.06.2010 / 02:07

3 respostas

3

Por fim, você pode usar strace. strace <program_to_execute lhe dará uma tonelada de informações, incluindo chamadas para bibliotecas. Não é tão limpa quanto as outras respostas, mas é outra maneira de fazer as coisas. (e útil por si só)


- Christopher Karel

    
por 23.06.2010 / 03:29
4

Usando ldd você pode ver as bibliotecas dinâmicas vinculadas a um arquivo binário específico.

Assim:

$ 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)
    
por 23.06.2010 / 02:11
2

Além do ldd, cat / proc / $ pid / maps mostrará quais bibliotecas foram mapeadas na memória, incluindo as dinâmicas carregadas após o início do programa (e itens excluídos também)

    
por 23.06.2010 / 02:49