En el contexto de los compiladores, el enlace es la fase donde las referencias de direcciones se cambian en direcciones absolutas reales.
Cuando el programa es compilado, la dirección de cada símbolo (variable, función) se almacena en la tabla de símbolos, por ejemplo, como un desplazamiento relativo desde el principio del módulo objeto, junto con el nombre del símbolo. El nombre del símbolo es necesario ya que los símbolos pueden ser llamados desde otro módulo de objeto.
Cuando el programa es vinculado, los módulos de objetos se combinan en un solo archivo de programa y los nombres de los símbolos ya no son necesarios. Si el programa está vinculado a una dirección absoluta conocida, todas las referencias de dirección pueden ser enlazadas a en direcciones absolutas que ya estén en esta fase.
Sin embargo, en las estaciones de trabajo como PC: s, el programa se puede cargar en cualquier dirección, por lo que la dirección no se conoce en el momento del enlace. Por lo tanto, la información de reubicación adicional se almacena en el archivo de programa para que el cargador pueda vincular las direcciones en el momento de la carga.
Encuadernación se realiza en el tiempo de carga utilizando la información de reubicación. Cuando se conoce la dirección donde se ejecutará el programa, el cargador reemplaza las direcciones relativas con las direcciones absolutas utilizando la información de reubicación que indica dónde deben hacerse los cambios en el código.
Para objetos/variables dinámicos, la vinculación se puede realizar en runtime. (Creo que esto es lo que generalmente se llama vinculación tardía.)
Por lo general, no es necesario que se preocupe demasiado por el enlace, al menos no cuando se utiliza el enlace anticipado. (Sin embargo, el enlace en tiempo de ejecución puede tener un impacto negativo en el rendimiento y la seguridad).
También tendría sentido observar qué es vinculante en comparación con lo que está vinculando. P.ej. Ada usa pasos separados para esos, mientras que C los fusiona/confunde. – ndim