Sem ficar muito técnico: Ambos são "linkers", ou seja, uma ferramenta que combina / carrega um código compilado com / em outra parte do código compilado.
ld
é um vinculador estático, enquanto ld.so
é um vinculador dinâmico.
As letras so
são, acredito, abreviatura de "objeto compartilhado", e você normalmente a vê como um sufixo de nome de arquivo de bibliotecas compartilhadas, ou seja, bibliotecas que podem ser dinamicamente vinculadas a programas (uma biblioteca é " compartilhada "entre vários programas). Em contraste, uma biblioteca estática geralmente tem o sufixo de nome de arquivo .a
, para "archive" (criado pelo utilitário ar
).
Um vinculador estático vincula um programa ou biblioteca em tempo de compilação, geralmente como a última etapa no processo de compilação, criando um executável binário ou uma biblioteca. No caso de um arquivo executável binário, ele pode ser um binário estático com bibliotecas todas carregadas no próprio binário, ou pode ser um binário vinculado dinamicamente com apenas algumas bibliotecas vinculadas estaticamente.
Um vinculador dinâmico carrega as bibliotecas que foram dinamicamente vinculadas em tempo de compilação ao espaço de endereço do processo em tempo de execução.
Consulte os manuais de ld
e ld.so
em seu sistema.