![Qual versão faz uso do sistema se houver várias versões de uma biblioteca](https://rvso.com/image/134431/Qual%20vers%C3%A3o%20faz%20uso%20do%20sistema%20se%20houver%20v%C3%A1rias%20vers%C3%B5es%20de%20uma%20biblioteca.png)
Digamos que temos uma biblioteca freetype já instalada em /usr/lib64/libfreetype.so cuja versão é 1.4 e há outra versão desta biblioteca que compilamos e instalamos em /usr/local/lib/libfreetype.so. Como o sistema de compilação (make) sabe qual versão usar quando construímos um software que requer freetype?
Responder1
Versão TL;DR: depende.
- SO: pode haver um
LD_LIBRARY_PATH
arquivo de configuração ou comando (comoldconfig(8)
) de ambiente específico do SO que registra os caminhos usados para procurar bibliotecas. - sistema de construção: pode havervariáveis ambientaiscomo
LDFLAGS
sinalizadores de linha de comando ou configurações de arquivo de configuração;mutt
has--with-curses=[dir]
para quando o sistema (ou usuário) possui ncurses em um caminho personalizado. Eles dependem do sistema de compilação (ou mesmo do tipomake
) e podem precisar ser gravados manualmente nos arquivos autoconf ou cmake. - configuração pós-construção: ferramentas como
patchelf
(se disponível) permitem que diferentes bibliotecas sejam selecionadas ou o caminho de pesquisa alterado.
Responder2
libxxx.so
geralmente é um link simbólico para o arquivo da biblioteca compartilhada que inclui a versão no nome.
Se você vincular usando -lxxx
, esse libxxx.so
arquivo será usado.
Se desejar vincular a outra versão, você precisará especificar o nome do caminho completo da biblioteca.