A biblioteca compartilhada HOWTO explica a maioria dos mecanismos envolvidos, e o manual do carregador dinâmico entra em mais detalhes. Cada variante unix tem seu próprio caminho, mas a maioria usa o mesmo formato executável ( ELF ) e possui vinculadores dinâmicos semelhantes (derivados do Solaris). Abaixo, resumirei o comportamento comum com foco no Linux; verifique os manuais do seu sistema para a história completa.
Em poucas palavras, quando procura uma biblioteca dinâmica ( .soarquivo), o vinculador tenta:
- diretórios listados na
LD_LIBRARY_PATHvariável de ambiente ( DYLD_LIBRARY_PATHno OSX);
- diretórios listados no rpath do executável ;
- diretórios no caminho de pesquisa do sistema, que (pelo menos no Linux) consiste nas entradas em
/etc/ld.so.confmais /libe /usr/lib.
O rpath é armazenado no executável (é o DT_RPATHou DT_RUNPATHatributo dinâmico). Ele pode conter caminhos absolutos ou caminhos começando com $ORIGINpara indicar um caminho relativo ao local do executável (por exemplo, se o executável estiver dentro /opt/myapp/bine seu rpath for $ORIGIN/../lib:$ORIGIN/../plugins, o vinculador dinâmico procurará /opt/myapp/libe /opt/myapp/plugins). O rpath é normalmente determinado quando o executável é compilado, com a -rpathopção para ld, mas você pode alterá-lo posteriormente com chrpath.
No cenário que você descreve, se você é o desenvolvedor ou acondicionador do aplicativo e pretendemos para que possa ser instalado em um …/bin, …/libestrutura, em seguida, ligar com -rpath='$ORIGIN/../lib'. Se você estiver instalando um binário pré-criado em seu sistema, coloque a biblioteca em um diretório no caminho de pesquisa ( /usr/local/libse você é o administrador do sistema, caso contrário, um diretório ao qual você adiciona $LD_LIBRARY_PATH) ou tente chrpath.
/lib64e/usr/lib64são usados para binários de 64 bits/libe/usr/libsão usados para binários de 32 bits.