Bibliotecas dinâmicas são carregadas pelo kernel, os caminhos não são codificados em um programa. Um programa apenas diz "Eu preciso da libc.so.6". O sistema procura nos caminhos da biblioteca, conforme definido em /etc/ld.so.conf
, incluindo /usr/lib
e /lib
por padrão. Este arquivo inclui arquivos de configuração adicionais em /etc/ld.so.conf.d
.
No meu sistema de 64 bits, libc.so.6
pode ser encontrado /lib/x86_64-linux-gnu/libc.so.6
devido ao caminho definido em /etc/ld.so.conf.d/x86_64-linux-gnu.conf
:
# Multiarch support
/lib/x86_64-linux-gnu
/usr/lib/x86_64-linux-gnu
Para descobrir qual biblioteca é carregada por um programa, use ldd
como em ldd /bin/bash
:
linux-vdso.so.1 => (0x00007ffff1dff000)
libncurses.so.5 => /lib/libncurses.so.5 (0x00007f9d8b3b8000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f9d8b1b4000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f9d8ae1f000)
/lib64/ld-linux-x86-64.so.2 (0x00007f9d8b61c000)
Colocar o link simbólico não quebraria nada.
Para obter uma lista dos diretórios pesquisados, execute:
ldconfig -v -N | grep '^/'
-v
faz com que uma lista de arquivos + diretórios seja exibida, -N
impede que o cache ( /etc/ld.so.cache
) seja recriado.