Che cos'è un file oggetto?
Un file oggetto è un file generato da un programma chiamato compilatore e contiene dati e istruzioni. I compilatori traducono il codice sorgente del linguaggio di programmazione in una forma intermedia leggibile dalla macchina nota come codice oggetto. Programmi più piccoli potrebbero essere compilati in un singolo file oggetto, mentre i programmi più grandi vengono generalmente compilati in diversi file con 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". Esistono tuttavia diversi formati per questi file. I più comuni sono Intel® Relocatable Object Module Format (OMF) e Common Object File Format (COFF) di Windows® e UNIX® System V. In molti sistemi INIX®, il formato eseguibile e collegabile (ELF) è arrivato a sostituire COFF.
Indipendentemente dal formato, un file oggetto in genere contiene tre tipi di informazioni che gli consentono di interagire con altri moduli del programma. Alle procedure e ai dati aperti a riferimenti esterni sono assegnati nomi con i quali possono essere chiamati da altri moduli. Allo stesso modo, i riferimenti alle informazioni esterne al modulo vengono annotati ma non viene assegnato un nome. Quando i file sono collegati, ai riferimenti senza nome verrà assegnato il nome assegnato 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 che vengono archiviate come codice oggetto. Sono prodotti più o meno allo stesso modo dei file oggetto e sono utili per archiviare le procedure chiamate di frequente. Quando un linker non trova un riferimento all'interno di altri file oggetto, lo cercherà automaticamente in un file di libreria. La maggior parte delle implementazioni di un linguaggio di programmazione include una libreria standard di funzioni.
Tramite 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 si fa riferimento a una procedura. In ambiente Windows®, queste sono note come librerie di collegamento dinamico e sono indicate da un'estensione ".dll". Sistemi simili a Unix® spesso definiscono questo tipo di file un oggetto dinamico dinamico (DSO). Questo tipo di file oggetto può anche essere implementato per l'uso con un determinato programma e farebbe parte dell'installazione di quel programma.