4.- ENLAZAR PROGRAMAS
"ENLAZAR PROGRAMAS"
Un enlazador es un programa que toma los objetos hechos en los primeros pasos del proceso de compilación, la información de todos los recursos necesarios como en la biblioteca, quita aquellos recursos que no se necesita, y enlaza el código objeto con su biblioteca con lo que finalmente produce un fichero ejecutable. En el caso de los programas enlazados dinámicamente, el enlace entre el programa ejecutable y las bibliotecas se realiza en tiempo de carga o ejecución del
Existen programas que se enlazan en el momento en el que se carga el programa.
1) Enlazado Estático:
Hemos dicho que durante el enlazado, el "Linker" asocia cada identificador con el objeto correspondiente. Lo que equivale a decir que asocia el identificador con la dirección del objeto. Esto puede efectuarse en tiempo de compilación. Cuando esto puede quedar completamente definido en tiempo de compilación, se dice que se trata de un enlazado previo o estático. Así pues, enlazado estático significa que cuando el compilador genera una llamada a una función determinada, el enlazador puede resolverla mediante la dirección absoluta del código que debe ejecutarse. Puede ser que de el caso de una función sobrecargada en la que el compilador puede saber qué instancia corresponde a una invocación por el análisis de los argumentos utilizados.
2) Enlazado Dinámico:
En ocasiones las cosas no suceden como se han descrito en el párrafo anterior. Hay veces en que hasta el momento de la ejecución, el programa no puede (o no quiere) determinar la dirección de la función que se invoca. Esta situación se presenta típicamente cuando se usan las denominadas librerías dinámicas y en la POO, cuando se programan operaciones genéricas con objetos sin saber que objeto concreto (instancia de la clase) la utilizará en su momento. Es decir, se utilizan clases polimórficas.
Para comprender el proceso en el que la función invocada no se encuentra en un módulo objeto, sino en una librería dinámica (DLL) que solo será cargada en el momento de la ejecución del programa o incluso más tarde; no cuando este arranca, sino cuando se realiza la invocación a la función. En estas condiciones, el enlazador no puede conocer la dirección de func1. La solución adoptada es precisamente el enlazado o dinámico.
En este tipo de enlazado, parte del código necesitado por la aplicación se encuentra en ficheros distintos del propio ejecutable. Por ejemplo, en las conocidas librerías .DLL. El inconveniente es que la ejecución exige la presencia de todos los módulos externos (que pueden estar efectivamente presentes o no).
La ventaja es que determinadas habilidades, sobre todo las del propio Sistema Operativo, y otras muy comunes, no necesitan estar duplicadas en cada ejecutable, con la consiguiente economía de espacio. Los ejecutables resultan así más pequeños.
El tipo de enlazado define una especie de ámbito, pues indica si el mismo nombre en otro ámbito se refiere al mismo objeto (variable o función) o a otro distinto.
• Cada instancia de un identificador con enlazado externo representa el mismo objeto o función a través del total de ficheros y librerías que componen el programa. Es el tipo de enlazado a utilizar con objetos cuyo identificador puede ser utilizado en unidades de compilación distinta de aquella en la que se ha definido. Por esta razón se dice que las etiquetas con enlazado externo son "globales" para el programa.
Recuerde: enlazado externo ↔ visibilidad global.
• Cada instancia de un identificador con enlazado interno representa el mismo objeto o función solo dentro del mismo fichero. Los objetos con el mismo nombre en otros ficheros son objetos distintos. Este tipo de objetos solo pueden utilizarse en la unidad de compilación en que se han definido, por lo que suele decirse que las etiquetas con enlazado interno son "locales" a sus unidades de compilación.
Recuerde: enlazado interno ↔ visibilidad de fichero.
• Las unidades sin enlazado representan entidades únicas. Por ejemplo, las variables declaradas dentro de un bloque, que no contengan el modificador externa, representan entidades únicas dentro del bloque, sin relación con nada en el exterior del mismo. Los objetos con el mismo nombre en otros bloques son objetos distintos. No obstante, es posible asignar punteros a este tipo de objetos sin enlazado, de forma que puedan ser accedidos desde cualquier punto del programa, incluso desde otras unidades de compilación. Programa.

Comentarios
Publicar un comentario