El enlace directo es una característica del enlazador y del enlazador dinámico en Solaris y OpenSolaris . Proporciona un método que permite a las bibliotecas vincular símbolos directamente a otras bibliotecas, en lugar de vincularlas débilmente y dejar que el vinculador dinámico averigüe qué biblioteca contiene el símbolo.
Teoría
Al vincular una biblioteca compartida o un ejecutable vinculado dinámico, el vinculador normalmente llena la tabla de símbolos para esa biblioteca con todos los símbolos requeridos. Agrega símbolos en el objeto actual con su desplazamiento y deja símbolos sin definir en el objeto sin resolver. Los símbolos no resueltos aún deben conocerse en el momento del enlace, pero al enlazador se le pasan bibliotecas compartidas para vincular y, cuando encuentra un símbolo en otra biblioteca, coloca una nota en la biblioteca de salida que indica que depende de estas otras bibliotecas compartidas.
Este tipo de enlace débil obliga al enlazador dinámico a resolver qué biblioteca contiene qué símbolo cuando se ejecuta el ejecutable. El enlazador dinámico en Linux, por ejemplo, lee la sección DT_NEEDED de un objeto ELF y carga las bibliotecas necesarias; pero no se le dice dónde están los símbolos requeridos. Para esto, debe iterar a través de cada símbolo no resuelto en el objeto, y para cada uno de estos, iterar a través de cada biblioteca cargada, verificando hasta encontrar un símbolo coincidente. Esto puede llevar mucho tiempo.
La vinculación directa soluciona este problema almacenando una lista equivalente de punteros a las entradas DT_NEEDED en una sección ELF separada. Cada puntero corresponde a un símbolo en el objeto; por lo tanto, estos punteros crean una relación entre un símbolo y una entrada DT_NEEDED. Esto permite que el enlazador ubique la biblioteca especificada por una entrada DT_NEEDED particular y verifique solo su tabla de símbolos para cada símbolo, en lugar de iterar potencialmente a través de cada biblioteca para cada símbolo.