Pergunta

Eu sei muito pouco sobre DLL e LIB do outro do que eles contêm código vital necessário para um programa para executar corretamente - bibliotecas. Mas por que compiladores gerá-los em tudo? Não seria mais fácil simplesmente incluir todo o código em um único executável? E qual é a diferença entre DLL e LIB do?

Foi útil?

Solução

Existem bibliotecas estáticas (lib) e bibliotecas dinâmico (DLL).

As bibliotecas são usadas porque você pode ter código que você deseja usar em muitos programas. Por exemplo, se você escrever uma função que conta o número de caracteres em uma string, essa função será útil em muitos programas. Depois de conseguir que a função funcionando corretamente você não quer ter que recompilar o código cada vez que você usá-lo, então você colocar o código executável para essa função em uma biblioteca, eo vinculador pode extrair e inserir o código compilado em seu programa . Bibliotecas estáticas são às vezes chamados de 'arquivos' por este motivo.

Bibliotecas dinâmicas levar isso um passo adiante. Parece um desperdício ter várias cópias das funções de biblioteca ocupando espaço em cada um dos programas. Por que todos eles compartilham cópia uma das funções não pode? Isto é o que bibliotecas dinâmicas são para. Ao invés de construir o código da biblioteca em seu programa quando ele é compilado, ele pode ser executado mapeando-lo em seu programa como ele é carregado na memória. programas de múltiplas rodando ao mesmo tempo que usam as mesmas funções podem todos compartilham uma cópia de, poupando memória. Na verdade, você pode carregar bibliotecas dinâmicas somente quando necessário, dependendo do caminho através de seu código. Nenhum ponto em ter as rotinas de impressora ocupando memória se você não está fazendo qualquer impressão. Por outro lado, isso significa que você tem que ter uma cópia da biblioteca dinâmica instalado em cada máquina de seu programa é executado. Isso cria seu próprio conjunto de problemas.

Por exemplo, quase todos os programas escritos em 'C' terá funções de uma biblioteca chamada 'biblioteca de tempo de execução C, embora alguns programas terá todas as funções. O tempo de execução C vem em duas versões estáticas e dinâmicas, para que você possa determinar qual versão seus usos do programa, dependendo das necessidades particulares.

Outras dicas

Outro aspecto é a segurança (ofuscamento). Uma vez que um pedaço de código é extraído a partir da aplicação principal e colocado em uma "separado" Biblioteca de vínculo dinâmico, é mais fácil de atacar, analisar (engenharia reversa) o código, uma vez que foi isolado. Quando o mesmo pedaço de código é mantido em uma Biblioteca LIB, é parte da (ligada) aplicação de destino compilado, e este, portanto, mais difícil de isolar (diferenciada) que parte do código do resto dos binários alvo.

Uma razão importante para a criação de uma DLL / LIB em vez de apenas compilar o código em um arquivo executável é a reutilização e realocação. A aplicação média Java ou .NET (por exemplo) usará mais provável várias bibliotecas 3o partido (ou quadro). É muito mais fácil e mais rápido para apenas compilar contra uma biblioteca pré-construída, ao invés de ter de compilar todo o código do 3o partido em sua aplicação. Compilar o código em bibliotecas também incentiva boas práticas de projeto, por exemplo, projetar suas classes para ser usado em diferentes tipos de aplicações.

A DLL é uma biblioteca de funções que são compartilhadas entre outros programas executáveis. Basta olhar em sua janelas diretório / system32 e você vai encontrar dezenas deles. Quando o programa cria uma DLL também normalmente cria um arquivo lib para que o aplicativo * .exe programa pode resolver símbolos que são declaradas na DLL.

A lib é uma biblioteca de funções que são estaticamente ligadas a um programa - eles não são compartilhados por outros programas. Cada programa que ligações com um arquivo * .lib tem todo o código no arquivo. Se você tem dois programas a.exe e B.exe que apontam com C.lib então cada A e B ambos contêm o código no C.lib.

Como você criar DLLs e libs depender do compilador que você usa. Cada compilador faz isso de forma diferente.

Uma outra mentira diferença no desempenho.

À medida que o DLL é carregado durante a execução pelos Exe (s), (s) a exe e o trabalho com DLL conceito de memória partilhada e, consequentemente, o desempenho é relativamente baixa para a ligação estática.

Por outro lado, uma lib é o código que é ligado estaticamente em tempo de compilação em cada processo que pedidos. Daí o .exe (s) terá de memória single, aumentando assim o desempenho do processo.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top