Si bien ambos se llaman "vinculadores" y se utilizan para vincular binarios, realmente no puedo entender cómo se diferencian entre sí. ¿Alguien puede decirme sus diferencias?
Sin ser demasiado técnico: ambos son "vinculadores", es decir, una herramienta que combina / carga un fragmento de código compilado con / en otro fragmento de código compilado.
ld
es un enlazador estático, mientras que ld.so
es un enlazador dinámico.
Las letras so
son, creo, abreviatura de "objeto compartido", y generalmente lo verá como un sufijo de nombre de archivo de bibliotecas compartidas, es decir, bibliotecas que pueden estar vinculadas dinámicamente en programas (una biblioteca está "compartida" entre varios programas) . En contraste, una biblioteca estática a menudo tiene el sufijo del nombre del archivo .a
, para "archivo" (creado por la ar
utilidad).
Un enlazador estático enlaza un programa o biblioteca en tiempo de compilación, generalmente como el ú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 con todas las bibliotecas 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 para ld
y ld.so
en su sistema.