CompiladoresVisão geral
Ligação e Bibliotecas
A ligação produz um executável a partir de módulos relocáveis. Cada nome global recebe um único endereço; cada referência relativa torna-se endereço absoluto nesse espaço.
Compilação por módulo, tabelas do objeto, resolução e realocação deste tópico — e a carga do executável e das bibliotecas compartilhadas no sistema operacional — partem desse endereço único.
As páginas se agrupam em quatro blocos. O primeiro fixa o contrato entre arquivos-fonte compilados um a um: declaração de tipo de um lado, definição com corpo ou espaço do outro.
O segundo registra o intermediário ainda sem bases finais: bytes de código e dados, o índice do definido e a lista do que depende da base.
O terceiro monta o espaço de endereços: associa cada referência indefinida a uma definição e soma a base de cada módulo.
O quarto escolhe origem e instante da resolução para módulos reunidos em biblioteca.
Declaração sem espaço num arquivo e definição noutro estão em Compilação Separada. Associar cada nome de Rᵢ a um único Dⱼ está em Processo de Ligação.
O mapa de seções, a .symtab e os campos a remendar estão em Arquivos Objeto. Escolher a base Bⱼ e somá-la a cada campo marcado está em Processo de Ligação.
As duas tarefas — resolver nomes e somar bases — estão em Processo de Ligação. Copiar membros de um .a, mapear um .so na carga ou completar a resolução com dlopen está em Bibliotecas.
Ligação interna, que impede o nome de sair daquele arquivo objeto, está em Compilação Separada. Extrair do .a só o membro que define um símbolo ainda indefinido está em Bibliotecas.
Páginas deste tópico
Compilação Separada
ProBaixa incidência no POSCOMP7 min de leitura · 28ª mais cobrada em Compiladores
Um .c vira um .o; declaração vs definição; símbolo indefinido ou duplicado.
Arquivos Objeto
ProBaixa incidência no POSCOMP7 min de leitura · 30ª mais cobrada em Compiladores
Módulo relocável; tabela ELF (.text, .data, .bss); símbolos e relocações como entrada do ligador.
Processo de Ligação
ProBaixa incidência no POSCOMP10 min de leitura · 27ª mais cobrada em Compiladores
Junta .o; resolve símbolos indefinidos; realoca endereço relativo em absoluto.
Bibliotecas
ProBaixa incidência no POSCOMP9 min de leitura · 29ª mais cobrada em Compiladores
Arquivo estático copiado no binário; lib compartilhada na carga; dlopen é carga explícita.