¿Qué es un archivo de objeto?
Un archivo de objeto es un archivo de computadora generado por un programa llamado compilador y contiene datos e instrucciones. Los compiladores traducen el código fuente del lenguaje de programación en una forma intermedia legible por máquina conocida como código objeto. Los programas más pequeños pueden compilarse en un solo archivo de objeto, mientras que los programas más grandes generalmente se compilan en varios archivos de funciones relacionadas. Estos archivos de objetos individuales se unen mediante un vinculador y se agrega información específica del sistema operativo para formar un programa ejecutable.
En la práctica común, un archivo de objeto se denota con una extensión de archivo ".obj". Sin embargo, hay varios formatos diferentes para estos archivos. Los más comunes son el formato de módulo de objetos reubicables Intel® (OMF) y el formato de archivos de objetos comunes (COFF) de Windows® y UNIX® System V. En muchos sistemas INIX®, el formato ejecutable y enlazable (ELF) ha llegado a reemplazar COFF.
Independientemente del formato, un archivo de objeto generalmente contiene información de tres tipos que le permite interactuar con otros módulos de programa. Los procedimientos y los datos que están abiertos a referencias externas son nombres asignados por los cuales pueden llamarse desde otros módulos. Del mismo modo, las referencias a información fuera del módulo se anotan pero no se les asigna un nombre. Cuando los archivos están vinculados, a las referencias sin nombre se les asignará el nombre que se les dio en el módulo donde se definieron originalmente. Los nombres locales se usan para instrucciones y datos referidos únicamente dentro de un módulo.
No todo el código enlazable se almacena como archivos de objeto. Las bibliotecas son colecciones de rutinas precompiladas que se almacenan como código objeto. Se producen de manera muy similar a los archivos de objetos y son útiles para almacenar procedimientos llamados con frecuencia. Cuando un vinculador no encuentra una referencia dentro de otros archivos de objeto, lo buscará automáticamente en un archivo de biblioteca. La mayoría de las implementaciones de un lenguaje de programación vienen con una biblioteca estándar de funciones.
Mediante la vinculación dinámica, un archivo de objeto puede ser utilizado simultáneamente por múltiples programas en ejecución. En lugar de vincular el código objeto a un programa cuando está vinculado, se recupera cuando se carga el programa o en tiempo de ejecución cuando se hace referencia a un procedimiento. En el entorno de Windows®, se conocen como bibliotecas de enlaces dinámicos y se denotan con una extensión ".dll". Los sistemas similares a Unix® a menudo denominan este tipo de archivo un objeto dinámico compartido (DSO). Este tipo de archivo de objeto también puede implementarse para su uso con un programa en particular y sería parte de la instalación de ese programa.