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.
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:
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.
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.
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.
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.
Gerar arquivo executável: a saída final é um arquivo executável que pode ser executado no sistema operacional.
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.
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:
deficiência:
Extensão de biblioteca estática:
.lib
.a
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:
deficiência:
Extensão de biblioteca dinâmica:
.dll
(Biblioteca de vínculo dinâmico).so
(Objeto Compartilhado)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:
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