Alguém me disse isso: "Eu sei que os links simbólicos não são usados no Linux ao carregar uma biblioteca".
No entanto, isso não me parece correto. Muitas vezes, tive que consertar links simbólicos quebrados quando estava mexendo no Linux.
Posso encontrar informações sobre links simbólicos, como eles funcionam e como são criados.
Posso encontrar informações sobre bibliotecas compartilhadas e estáticas e como elas funcionam.
Mas não consigo encontrar nenhuma documentação que descreva o processo de carregamento da biblioteca de como os links simbólicos são usados ao carregar bibliotecas. Especialmente quando há várias versões da biblioteca.
Alguém pode me indicar uma documentação que descreva como os links simbólicos são usados para carregar bibliotecas no Linux?
Atualizar
Depois de alguma pesquisa, acredito que a pessoa estava insinuando que os .so
links simbólicos não são usados ao carregar uma biblioteca.
É improvável que você encontre qualquer documentação que descreva como as bibliotecas dinâmicas funcionam com links simbólicos porque esses dois conceitos são implementados em diferentes níveis de abstração. Symlinks pertencem a sistemas de arquivos e são transparentes para aplicativos e bibliotecas dinâmicas. Para o programa, um arquivo é apenas um arquivo, seja um arquivo real ou um link simbólico. Todos os trabalhos internos estão ocultos no kernel do sistema operacional.
Acontece que não entendi o processo de vinculação às bibliotecas.
Quando uma biblioteca é vinculada a um programa após sua compilação, ela é vinculada ao soname (que geralmente é o
.so.XX
arquivo, onde XX é um número de versão) da biblioteca, não à.so
versão.A execução
ldd
em um aplicativo mostra isso:Cada uma dessas bibliotecas tem uma
.so
versão de link simbólico que aponta para a.so.X
versão principal. Masldd
mostra que o aplicativo não está vinculado à.so
versão.Isso faz sentido porque permite que várias versões de uma biblioteca sejam instaladas no sistema e cada aplicativo carregará apenas a versão necessária sem entrar em conflito com outras versões.
Por exemplo, suas bibliotecas de curl podem ter esta aparência:
Digamos que MyApplication foi vinculado à versão 4 e YourApplication foi vinculado à versão 3.
Se ambos os aplicativos estivessem procurando por libcurl.so, YourApplication falharia ao carregar porque
libcurl.so
é um link simbólico paralibcurl.so.4
.É por isso que o aplicativo precisa carregar a
.so.X
versão e não a.so
versão.