
Si bien ambos se denominan "enlazador" y se utilizan para vincular archivos binarios, realmente no puedo entender en qué se diferencian entre sí. ¿Alguien puede decirme sus diferencias?
Respuesta1
Sin ser demasiado técnico: ambos son "enlazadores", es decir, una herramienta que combina/carga una pieza de código compilado con/en otra pieza de código compilado.
ld
es un enlazador estático, mientras que ld.so
es un enlazador dinámico.
Creo que las letras so
son la abreviatura de "objeto compartido" y generalmente lo verá como un sufijo de nombre de archivo de bibliotecas compartidas, es decir, bibliotecas que pueden vincularse dinámicamente a programas (una biblioteca se "comparte" entre varios programas). . Por el contrario, una biblioteca estática suele tener el sufijo de nombre de archivo .a
, para "archivo" (creado por la ar
utilidad).
Un vinculador estático vincula un programa o biblioteca en tiempo de compilación, generalmente como último paso en el proceso de compilación, creando un ejecutable binario o una biblioteca. En el caso de un archivo ejecutable binario, puede ser un binario estático contodobibliotecas cargadas en el propio binario, o puede ser un binario vinculado dinámicamente con solo algunas bibliotecas vinculadas estáticamente.
Un vinculador dinámico carga las bibliotecas que se vincularon dinámicamente en tiempo de compilación en el espacio de direcciones del proceso en tiempo de ejecución.
Consulte los manuales ld
de ld.so
su sistema.