c - Pra que serve um linker? - Stack Overflow em Português
Algumas linguagens se utilizam de um linker ou likeditor como também é chamado. Qual é a função dele e a relação com o compilador?
Por que algumas linguagens não possuem um linker?
editada 22/03/17 às 13:31
O linker é um utilitário que costuma ser complementar ao compilador. Ele pega código binário gerado pelo compilador e junta tudo, daí o nome, em um executável. O executável pode ser algo para chamada direta ou para ligação dinâmica (DLL).
Eventualmente ele pode gerar uma biblioteca com diversos códigos binários e que poderá ser usada mais tarde para gerar um executável. Nesse caso a biblioteca precisa ser especificada para ligar junto.
Muitas vezes o programador iniciante não entende porque ele usou um #include mas dá erro que não achou um símbolo (função, variável global, tipos, etc.). Não é problema no código e sim na linkedição, faltou especificar onde deve pegar esse símbolo, seja na biblioteca ou em outro binário gerado separado em outro processo de compilação.
É comum que o compilador gere uma unidade de compilação, em alguns contextos chamado de código objeto. Essa unidade pode conter vários fontes. O linker junta essas unidades, portanto tudo o que está dentro dele será colocado no executável, mesmo que não vá usar na aplicação. Em linguagens que possuem classes a unidade de compilação pode incluir toda a classe, ou um grupo de classes.
Ele entende como gerar o formato do executável para cada plataforma, e pode fazer algumas otimizações que só são possíveis quando todo o código está junto (LTO). Em geral ele faz uma relocação de endereços internos quando junta tudo.
Linguagens que possuem um bytecode ou são interpretadas não possuem linker tradicional já que não geram código binário. Algumas dessas linguagens possuem um JITter que gerará o código binário tudo junto.
Tem utilitário que reúne o compilador e o linkeditor, então pode parecer que não existe um ligador de binários, mas ele já faz logo em seguida da compilação.
editada 8/05/20 às 18:34
respondida 21/03/17 às 15:01
Esta não é a resposta que você está procurando? Pesquise outras perguntas com a tag c c++ terminologia linkagem ou faça sua própria pergunta.