Na ligação: na fase de compilação, o compilador traduz o código fonte em código binário, mas não define os endereços das variáveis e funções, gerando como saída um arquivo objeto (object file), que contém o código binário e uma tabela de símbolos descrevendo as variáveis e funções usadas, seus tipos, onde estão definidas e onde são usadas.
A seguir, o ligador (linker) pega os arquivos objetos com suas tabelas de símbolos, define os endereços de memória dos símbolos e gera o programa executável.