![Por que /usr/local/lib não está no caminho da biblioteca por padrão?](https://rvso.com/image/109240/Por%20que%20%2Fusr%2Flocal%2Flib%20n%C3%A3o%20est%C3%A1%20no%20caminho%20da%20biblioteca%20por%20padr%C3%A3o%3F%20.png)
Debaixo deESF, pacotes de sistema (por exemplo, RPMs) instalam bibliotecas em /usr/lib
(ou /usr/lib64
). Da mesma forma, bibliotecas compiladas usando a antiga configure;make;make install
rotina " ", que não fazem parte da distribuição do sistema, por padrão são instaladas em /usr/local/lib
(ou /usr/local/lib64
).
Em geral, é considerado falta de educação exigir que os usuários alterem LD_LIBRARY_PATH ou ld.so.conf
os aplicativos que eles instalam. Veja por exemplo:
http://web.archive.org/web/20060719201954/http://www.visi.com/~barr/ldpath.html
Contudo, não deveria /usr/local/lib
haver uma exceção a esta regra?
Se for esse o caso, por que muitas/a maioria das distribuições não são incluídas /usr/local/lib
no caminho de pesquisa da biblioteca por padrão? Até agora apenas o ArchLinux parece ter considerado isso um bug, vejahttp://bugs.archlinux.org/task/20059?project=1&opened=2263
e o relacionadohttp://bbs.archlinux.org/viewtopic.php?id=99807
É mais correto para um aplicativo que precisa de uma biblioteca /usr/local/lib
para incluir /usr/local/lib
em seu RPATH ou esperar que o sistema operacional já tenha essa configuração? Não gosto da ideia de usar algo que não seja baseado em $ORIGIN no RPATH.
Esta não é uma questão de pedantismo, pois tem implicações para a estabilidade do sistema e para a forma como o software deve ser empacotado.
Responder1
Foi sugerido que /usr/local/lib deveria estar no caminho padrão e deveria ser considerado um 'bug' em variantes do Linux como Red Hat, onde não está.
Esta respostahttps://stackoverflow.com/a/17653893 aponta as partes mais importanteshttp://linuxmafia.com/faq/Admin/ld-lib-path.html
Muitas distribuições derivadas do Red Hat normalmente não incluem /usr/local/lib no arquivo /etc/ld.so.conf. Eu considero isso um bug, e adicionar /usr/local/lib ao /etc/ld.so.conf é uma ``correção'' comum necessária para executar muitos programas em sistemas derivados do Red Hat.
Levantei isso com a Red Hat e agora discordo.
Os pacotes fornecidos pela Red Hat nunca são instalados em /usr/local em sistemas onde os fornecedores instalam em /usr/local a resposta é diferente. Nesses sistemas, pode-se razoavelmente esperar que /usr/local/lib esteja no caminho de pesquisa padrão.
A Red Hat apontou que /usr/local/lib não deveria estar no caminho de pesquisa padrão, pois qualquer biblioteca adicionada lá poderia ser obtida pelo RPM e yum.
Eu investiguei isso mais detalhadamente. Se você instalar sua própria versão de uma biblioteca de sistema em /usr/local/lib então ela poderá satisfazer uma dependência de outro pacote de sistema que você instala normalmente via RPM ou yum. Obviamente, isso pode afetar a estabilidade do sistema. Pior, faria isso de maneira bastante sutil. yum check pode informar que você possui todas as versões de fornecedores de todos os pacotes necessários e não perceber que possui sua própria versão de algo significativo em/usr/local/lib.
Em sistemas que usam um gerenciador de pacotes diferente, isso pode não se aplicar.
Não tenho uma resposta completa sobre o que colocar no seu RPATH. No entanto, acho que você deve evitar depender de bibliotecas em /usr/local/lib e, em vez disso, instalá-las em /opt (ou seja, em algum lugar que você controle como parte de sua instalação) sempre que for prático.