Compartilhamento de tecnologia

Como funciona o vinculador, a diferença entre vinculação estática e vinculação dinâmica, como criar e usar bibliotecas de link dinâmico

2024-07-08

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

O vinculador desempenha um papel vital no desenvolvimento do programa. Ele é responsável por integrar vários arquivos-objeto e arquivos de biblioteca em um arquivo executável. Antes de nos aprofundarmos em como o vinculador funciona, a diferença entre vinculação estática e vinculação dinâmica e como criar e usar bibliotecas de vínculo dinâmico, vamos primeiro descrever as funções básicas do vinculador.

Como funciona o vinculador

Vinculador É uma ferramenta responsável por combinar um ou mais arquivos objeto e arquivos de biblioteca em um arquivo executável. Suas principais funções incluem:

  1. Análise de símbolos : Identifique e processe todos os símbolos (nomes de funções e variáveis) no programa, garantindo que cada símbolo tenha uma definição única. Para símbolos referenciados, mas não definidos (símbolos externos), o vinculador procura uma definição em uma biblioteca fornecida ou em outro arquivo de objeto.

  2. reiniciar : Ajuste o código e os endereços de dados em cada módulo para o endereço de memória final. A realocação inclui correção de endereço no código e ajuste de posição do segmento de dados para garantir que todas as referências apontem para o local correto da memória.

  3. mesclar segmentos: mescla segmentos do mesmo tipo (como segmentos de código, segmentos de dados, etc.) de diferentes arquivos de destino em um segmento contínuo.

  4. biblioteca de processamento : Vincule o código da biblioteca exigido pelo programa ao arquivo objeto. O vinculador pode lidar com dois tipos de bibliotecas: bibliotecas estáticas e bibliotecas dinâmicas.

  5. Gerar arquivo executável: a saída final é um arquivo executável que pode ser executado no sistema operacional.

A diferença entre vinculação estática e vinculação dinâmica

Vinculação estática eVinculação dinâmica São dois modos de funcionamento do vinculador, cada um com características e cenários de uso diferentes.

link estático
  • conceito : na vinculação estática, o código da biblioteca é copiado em tempo de compilação e incorporado em cada executável que o utiliza. Desta forma, o arquivo executável gerado contém todo o código necessário e não depende de arquivos de biblioteca externa.

  • vantagem

    • Forte independência: O arquivo executável gerado contém todas as dependências e não requer arquivos de biblioteca adicionais em tempo de execução.
    • Boa compatibilidade: o tempo de execução não depende da versão da biblioteca instalada no sistema e não encontrará o problema de “conflito de versão da biblioteca”.
  • deficiência

    • Tamanho de arquivo grande: Cada arquivo executável contém código de biblioteca completo, resultando em tamanho de arquivo maior.
    • Problema de atualização: Se a biblioteca for atualizada, todos os programas que a utilizam precisarão ser recompilados.
  • Extensão de biblioteca estática

    • Janelas: .lib
    • Unix/Linux: .a
link dinâmico
  • conceito : na vinculação dinâmica, o código da biblioteca é carregado em tempo de execução e não é incorporado no arquivo executável. O executável contém apenas referências a bibliotecas e o código da biblioteca é carregado pelo sistema operacional em tempo de execução.

  • vantagem

    • Tamanho de arquivo pequeno: o arquivo executável não contém código de biblioteca, apenas referências à biblioteca.
    • Fácil de atualizar: A atualização de bibliotecas não requer a recompilação do programa, apenas a substituição dos arquivos da biblioteca.
    • Alta eficiência de memória: Vários programas podem compartilhar instâncias de memória do mesmo arquivo de biblioteca, reduzindo o uso de memória.
  • deficiência

    • Dependências fortes: O arquivo executável precisa ser capaz de localizar e carregar a versão correta do arquivo de biblioteca quando for executado.
    • Problemas de compatibilidade: A incompatibilidade de versão do arquivo da biblioteca pode causar falha no programa.
  • Extensão de biblioteca dinâmica

    • Janelas: .dll(Biblioteca de vínculo dinâmico)
    • Unix/Linux: .so(Objeto Compartilhado)

Crie e use bibliotecas de links dinâmicos

Criar biblioteca de link dinâmico

Em diferentes sistemas operacionais, os métodos de criação de bibliotecas de vínculo dinâmico são ligeiramente diferentes. Aqui estão algumas etapas e comandos comuns:

Crie uma biblioteca de link dinâmico no Linux
  1. Escreva o código da biblioteca

    Crie um arquivo fonte C contendo as funções que queremos colocar na biblioteca dinâmica.

    // example.cpp
    #include