# Biblioteca estática

Em ciência da computação, uma biblioteca estática ou biblioteca ligada estaticamente é um conjunto de rotinas, funções externas e variáveis que são resolvidas em um chamador em tempo de compilação e copiadas em uma aplicação alvo por um compilador, vinculador ou ligador, produzindo um arquivo objeto e um executável autônomo. Este executável e o processo de compilação são ambos conhecidos como uma compilação estática do programa. Historicamente, as bibliotecas só podiam ser estáticas. Bibliotecas estáticas são mescladas com outras bibliotecas estáticas e arquivos objeto durante a compilação/ligação para formar um único executável ou carregado em tempo de execução no espaço de endereços de seus executáveis correspondentes em um deslocamento de memória estático determinado em tempo de compilação/ligação.

## Vantagens e desvantagens

Há várias vantagens para ligar bibliotecas estaticamente com um executável em vez de ligá-las dinamicamente. A mais significante é que a aplicação pode certificar-se de que todas as suas bibliotecas estão presentes e que elas estão na versão correta. Isto evita problemas de dependência, conhecidos coloquialmente como inferno de DLLs, por exemplo, ou mais geralmente inferno de dependências. A ligação estática pode também permitir que a aplicação seja contida em um único arquivo executável, simplificando a distribuição e instalação.
Com a ligação estática, é suficiente incluir aquelas partes da biblioteca que estão diretamente ou indiretamente referenciadas pelo executável alvo (ou biblioteca alvo). Com bibliotecas dinâmicas, a biblioteca inteira é carregada, uma vez que ela não são conhecidas antecipadamente quais funções serão invocadas pelas aplicações. Se esta vantagem é significante na prática depende da estrutura da biblioteca.
Na ligação estática, o tamanho do executável torna-se maior que na ligação dinâmica, uma vez que o código da biblioteca é armazenado dentro do executável em vez de em um arquivo separado. Mas se os arquivos da biblioteca são contados como parte da aplicação então o tamanho total será similar, ou até mesmo menor se o compilador eliminar os símbolos não utilizados. No Microsoft Windows é comum incluir os arquivos de biblioteca que um aplicativo precisa, junto com a aplicação. Em sistemas do tipo Unix isto é menos comum uma vez que os sistema de gerenciamento de pacote podem ser usados para garantir que os arquivos de biblioteca corretos estejam disponíveis. Isto permite que os arquivos de biblioteca sejam compartilhados entre muitas aplicações levando à economia de espaço. Também permite que a biblioteca seja atualizada para corrigir bugs e falhas de segurança sem atualizar as aplicações que usam a biblioteca. Na prática, muitos executáveis (especialmente aqueles destinados ao Microsoft Windows) usam tanto bibliotecas estáticas quanto dinâmicas.

## Ligação e carregamento

Qualquer função de biblioteca estática pode chamar uma função ou procedimento em outra biblioteca estática. O ligador ou carregador manipula isto da mesma forma como para tipos de outros arquivos objeto. Arquivos de biblioteca estática podem ser ligados em tempo de execução por um carregador de ligação (e.g., o carregador de módulos do X11). Entretanto, se tal processo pode ser chamado de ligação estática é uma definição controversa.