¿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 a 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 función relacionada. Estos archivos de objetos individuales están unidos por un enlazador 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 indica con una extensión de archivo «.obj». Sin embargo, existen varios formatos diferentes para estos archivos. Los más comunes son el formato de módulo de objeto reubicable Intel® (OMF) y el formato de archivo de objeto común (COFF) de Windows® y UNIX® System V.En muchos sistemas INIX®, el formato ejecutable y enlazable (ELF) se ha convertido en reemplace COFF.

Independientemente del formato, un archivo de objeto normalmente contiene información de tres tipos que le permite interactuar con otros módulos del programa. A los procedimientos y datos que están abiertos a referencias externas se les asignan nombres con los que se les puede llamar desde otros módulos. Del mismo modo, las referencias a información fuera del módulo se indican 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 utilizan para instrucciones y datos a los que se hace referencia ú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 la misma manera que los archivos de objeto y son útiles para almacenar procedimientos llamados con frecuencia. Cuando un vinculador no encuentra una referencia dentro de otros archivos de objeto, la 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 varios programas en ejecución. En lugar de vincular el código de 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 vínculos dinámicos y se indican con una extensión «.dll». Los sistemas similares a Unix® a menudo denominan a este tipo de archivo un objeto compartido dinámico (DSO). Este tipo de archivo de objeto también se puede implementar para su uso con un programa en particular y sería parte de la instalación de ese programa.