Skip to content
Latchkey

O Que É um Linker? Juntando Peças Compiladas Num Programa

Um linker é a ferramenta de build que combina peças de código compiladas separadamente e bibliotecas num único programa executável, resolvendo as referências entre elas.

Compiladores normalmente traduzem cada arquivo fonte num arquivo objeto separado. Nenhum deles é um programa completo; eles referenciam funções e variáveis definidas em outros arquivos ou bibliotecas. O linker é o que os costura juntos: ele resolve cada referência, define o layout final e produz um único executável ou biblioteca. Muitas falhas de build são na verdade erros de link.

O que o linker faz

Depois de a compilação produzir arquivos objeto, o linker casa cada referência (uma chamada a uma função, um uso de um global) com sua definição em algum lugar entre todos os objetos e bibliotecas. Ele então combina tudo num único artefato com todos os endereços resolvidos.

Compilador vs linker

O compilador trabalha em um arquivo fonte por vez e não sabe sobre outros arquivos. O linker trabalha entre todos eles, e é por isso que alguns erros (símbolos indefinidos ou duplicados) só aparecem no momento do link, depois de cada arquivo individual ter compilado bem.

Erros comuns de link

  • Símbolo indefinido: uma função ou variável referenciada não tem definição.
  • Símbolo duplicado: a mesma coisa é definida em dois lugares.
  • Biblioteca ausente: uma dependência não foi fornecida ao linker.
  • Incompatibilidade de arquitetura: objetos construídos para alvos incompatíveis.

Linking estático vs dinâmico

O linker pode copiar o código da biblioteca diretamente no executável (linking estático) ou deixar referências a serem resolvidas em tempo de carregamento a partir de bibliotecas compartilhadas (linking dinâmico). Cada um tem trade-offs em tamanho, inicialização e como as atualizações se propagam.

Um exemplo rápido

Um programa que chama uma função declarada mas nunca definida compila limpo por arquivo, depois falha com um erro de "undefined reference" do linker quando ele tenta combinar tudo.

O linker em CI

Erros de link são falhas de build determinísticas, símbolos ou bibliotecas ausentes, que falham de forma idêntica em toda execução, então repetir nunca ajuda. Normalmente significam um build mal configurado ou uma dependência ausente. A Latchkey repete apenas falhas transitórias de infraestrutura, deixando erros genuínos de link visíveis para corrigir.

Principais conclusões

  • Um linker combina arquivos objeto compilados e bibliotecas num único programa.
  • Erros de link (símbolos indefinidos ou duplicados, bibliotecas ausentes) aparecem após a compilação ter sucesso.
  • São falhas de build determinísticas a corrigir, não falhas transitórias a repetir.

Guias relacionados