A estratégia de ligação direta apresentada na Seção 4.5 ilustra bem o princípio de resolução de endereços entre módulos, mas ainda apresenta limitações. Uma das limitações é que o programa carregador é mais complexo que o carregador absoluto, ocupando mais espaço em memória. Como o carregador compartilha memória com o programa sendo executado, menos memória é deixada para a aplicação.
Uma estratégia alternativa é isolar os procedimentos de ligação e de carregamento em programas separados. O programa ligador recebe como entrada os diversos módulos a conectar, gerando como saída um único módulo de carga. O programa carregador recebe o módulo de carga como entrada, transfere seu código para a memória e realiza apenas os ajustes de relocação de acordo com o endereço base de memória.
Separando as funções entre dois programas, para o exemplo acima um ligador poderia criar o seguinte módulo de carga:
0.2E 1.00.6.10390000002C 1.06.4.0C00000A 1.0A.2.6D02 1.0C.2.5E00 1.0E.4.06000030 1.12.6.13C00000001A 1.18.2.4E75 1.1A.2.0000 1.1C.6.30390000002A 1.22.6.33C00000002C 1.28.2.4E75 1.2A.2.0000 1.2C.2.0000 2.02.4 2.14.4 2.1E.4 2.24.4 3.00
Este resultado foi obtido essencialmente através das seguintes modificações com relação ao algoritmo do carregador com ligação direta:
O carregador obtém a informação de quanto espaço deve ser alocado do registro inicial (tipo 0), transfere o código (registros tipo 1) para a área de memória alocada e usa a informação do diretório de relocação (registros tipo 2) para ajustar o endereço nas posições indicadas.
Um ligador que produz módulos de carga relocáveis é usualmente denominado um link-editor, sendo que os mais elaborados permitem definir diversas seções e a inclusão de comandos específicos para a ligação. Um exemplo é o comando ld do Unix. A implementação deste comando (GNU) em Linux incorpora a seguinte informação na sua documentação:
ld combina um número de arquivos objeto e de bibliotecas, reloca seus dados e amarra referências simbólicas. Usualmente o último passo na compilação de um programa é rodar ld.
ld aceita arquivos Linker Command Language escritos em um superconjunto da sintaxe da AT&T's Link Editor Command Language, para fornecer controle total e explícito sobre o processo de ligação.
A linguagem de comandos suportada por ld controla os seguintes aspectos: