Qual versão faz uso do sistema se houver várias versões de uma biblioteca

Qual versão faz uso do sistema se houver várias versões de uma biblioteca

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_PATHarquivo de configuração ou comando (como ldconfig(8)) de ambiente específico do SO que registra os caminhos usados ​​para procurar bibliotecas.
  • sistema de construção: pode havervariáveis ​​ambientaiscomo LDFLAGSsinalizadores de linha de comando ou configurações de arquivo de configuração; mutthas --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 tipo make) 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.sogeralmente é um link simbólico para o arquivo da biblioteca compartilhada que inclui a versão no nome.

Se você vincular usando -lxxx, esse libxxx.soarquivo será usado.

Se desejar vincular a outra versão, você precisará especificar o nome do caminho completo da biblioteca.

informação relacionada