Enquanto os dois são chamados de "vinculador" e são usados para vincular binários, não consigo descobrir como eles diferem um do outro. Alguém pode me dizer suas diferenças?
Sem ser muito técnico: Ambos são "linkers", ou seja, uma ferramenta que combina / carrega um pedaço de código compilado com / em outro pedaço de código compilado.
ld
é um vinculador estático, enquanto ld.so
é um vinculador dinâmico.
As letras so
são, acredito, abreviação de "objeto compartilhado", e você geralmente o 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) . Por outro lado, uma biblioteca estática geralmente possui o sufixo do nome do arquivo .a
, para "archive" (criado pelo ar
utilitário).
Um vinculador estático vincula um programa ou biblioteca em tempo de compilação, geralmente como a última etapa do processo de compilação, criando um executável binário ou uma biblioteca. No caso de um arquivo executável binário, pode ser um binário estático com todas as bibliotecas 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 vinculadas dinamicamente no tempo de compilação no espaço de endereço do processo no tempo de execução.
Consulte os manuais para ld
e ld.so
no seu sistema.