
Embora ambos sejam chamados de "vinculadores" e sejam usados para vincular binários, não consigo entender como eles diferem um do outro. Alguém pode me dizer suas diferenças?
Responder1
Sem ser muito técnico: ambos são "linkers", ou seja, uma ferramenta que combina/carrega um trecho de código compilado com/em outro trecho de código compilado.
ld
é um vinculador estático, enquanto ld.so
é um vinculador dinâmico.
As letras so
são, acredito, abreviações de "objeto compartilhado", e você geralmente as verá como um sufixo de nome de arquivo de bibliotecas compartilhadas, ou seja, bibliotecas que podem ser vinculadas dinamicamente a programas (uma biblioteca é "compartilhada" entre vários programas) . Por outro lado, uma biblioteca estática geralmente possui o sufixo de nome de arquivo .a
, para "arquivo" (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 comtodosbibliotecas 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 em tempo de compilação no espaço de endereço do processo em tempo de execução.
Consulte os manuais ld
do ld.so
seu sistema.