Che cos’è un file oggetto?

Un file oggetto è un file del computer generato da un programma chiamato compilatore e contiene dati e istruzioni. I compilatori traducono il codice sorgente del linguaggio di programmazione in una forma leggibile dalla macchina intermedia nota come codice oggetto. I programmi più piccoli potrebbero essere compilati in un singolo file oggetto, mentre i programmi più grandi sono generalmente compilati in più file di funzioni correlate. Questi singoli file oggetto sono uniti da un linker e le informazioni specifiche del sistema operativo vengono aggiunte per formare un programma eseguibile.

Nella pratica comune, un file oggetto è indicato da un’estensione di file “.obj”. Tuttavia, esistono diversi formati per questi file. I più comuni sono l’Intel® Relocatable Object Module Format (OMF) e il Common Object File Format (COFF) di Windows® e UNIX® System V. In molti sistemi INIX®, Executable and Linkable Format (ELF) è arrivato a sostituire COFF.

Indipendentemente dal formato, un file oggetto contiene in genere tre tipi di informazioni che gli consentono di interagire con altri moduli del programma. A procedure e dati aperti a riferimenti esterni vengono assegnati nomi con i quali possono essere chiamati da altri moduli. Allo stesso modo, i riferimenti a informazioni al di fuori del modulo vengono annotati ma non assegnati a un nome. Quando i file sono collegati, ai riferimenti senza nome verrà assegnato il nome dato loro nel modulo in cui sono stati originariamente definiti. I nomi locali vengono utilizzati per istruzioni e dati a cui si fa riferimento esclusivamente all’interno di un modulo.

Non tutto il codice collegabile viene archiviato come file oggetto. Le librerie sono raccolte di routine precompilate memorizzate come codice oggetto. Sono prodotti più o meno allo stesso modo dei file oggetto e sono utili per memorizzare le procedure chiamate di frequente. Quando un linker non trova un riferimento all’interno di altri file oggetto, lo cercherà automaticamente in un file libreria. La maggior parte delle implementazioni di un linguaggio di programmazione viene fornita con una libreria standard di funzioni.

Mediante il collegamento dinamico, un file oggetto può essere utilizzato contemporaneamente da più programmi in esecuzione. Invece di associare il codice oggetto a un programma quando è collegato, viene recuperato quando il programma viene caricato o in fase di esecuzione quando viene fatto riferimento a una procedura. Nell’ambiente Windows®, queste sono note come librerie a collegamento dinamico e sono indicate da un’estensione “.dll”. I sistemi simili a Unix® spesso definiscono questo tipo di file un oggetto condiviso dinamico (DSO). Questo tipo di file oggetto può anche essere implementato per l’uso con un particolare programma e farebbe parte dell’installazione di quel programma.