2012-12-22 18 views
7

Quando compiliamo il codice, viene generato un file oggetto. Da quel file oggetto, viene generato un file eseguibile nel processo di collegamento.Perché è necessario un file oggetto per generare un file eseguibile?

Perché abbiamo bisogno di un file oggetto? Qual è l'uso di un file oggetto? Non è possibile che un file eseguibile sia generato direttamente? Dopo tutto, stiamo usando un file eseguibile per eseguire il programma.

risposta

11

I file oggetto sono ciò che il linker utilizza per creare file eseguibili completi (o librerie).

In genere, è possibile che l'output del compilatore sia eseguibile "direttamente", la sintassi dipenderà dal compilatore. Per esempio con GCC:

gcc foo.c bar.c ... 

produrrà un alcun file oggetto intermedio eseguibile e rimarrà (ma uno probabilmente sono stati generati - e successivamente cancellato).

I file oggetto vengono utilizzati per creare una build incrementale. Compilate ciascun file sorgente (o gruppo di file sorgente) in file oggetto, quindi collegateli tutti insieme in un file eseguibile. Ciò ti consente di ricompilare solo i file sorgente che sono stati modificati dall'ultima volta che hai creato, risparmiando potenzialmente molto tempo.
Oppure è possibile utilizzare gli stessi file oggetto per collegare diversi eseguibili (riutilizzare le parti della build per generare sia un file eseguibile che una libreria condivisa, ad esempio), risparmiando ancora tempo e risorse rispetto alla compilazione di tutto ogni volta.

I file oggetto non sono "necessari" da un punto di vista teorico. Sono solo molto pratici (e in realtà necessari tecnicamente con alcuni (più?) Toolchain, sono le cose che l'assemblatore sa come produrre e il linker sa come collegare).

Problemi correlati