cos'è un compilatore in c++?
cos'è un compilatore in c++?
serve a trasformare i sorgenti scritti in c++ in una forma direttamente compresibile alla cpu
Nn proprio,crea un file oggetto,per essere in linguaggio macchina deve essere il file oggetto linkato.devilheart
No,perchè nn è eseguibile.devilheart
Il file oggetto prima di essere eseguito viene linkato dal linker e dopo caricato in memoria dal loader.
Ciao,
Il file oggetto generato dal compilatore, come dice Toad, è una sorta di stato intermedio tra il codice e l'eseguibile finale.
Non è assolutamente eseguibile dalla CPU e contiene, oltre a parte del codice in un formato bytecode che dipende spesso dal compilatore (.obj creati da compilatori diversi sono raramente utilizzabili con altri compilatori), contiene i nomi delle funzioni (che il linker dovrà trasformare in indirizzi) e una serie di altre informazioni.
E'il linker a tradurre tutti gli indirizzi presenti nel .obj e a "rimettere insieme i pezzi", per così dire, producendo un .exe a tutti gli effetti.
I compilatori C lavorano tutti eseguendo (a volte nascondendolo all'utente) in sequenza le due effettive operazioni di compilazione e linking.
Ciaociao
Venite a visitarci qui: http://www.bottomap.com/
ho detto comprensibile, non eseguibile e i termini non sono sinonimi. hai mai provato a disassemblare un file oggetto?Toad
No.Cmq,nel file oggetto vengono messe le libreire incluse sostituite le eventuali define con la variabile,come dice bottomap nn è ancora comprensibile dalla CPU,anche se è in linguaggio macchina,perchè nn è stato linkato.devilheart
è possibile che mi sono espresso male. per eseguibile intendo un programma che può essere invocato da terminale, lanciato da un doppio click etc. ; richiede gli input e produce dei risultati. con comprensibile intento che la sequenza di bit di cui è composto può essere direttamente interpretata dalla cpu senza ulteriori modifiche. ad esempio se del file oggetto c'è l'op code dell'istruzione ADD la cpu sa chè è una ADD senza l'aiuto del linker. è ovvio che le cose smettono di funzionare quando nel file oggetto c'è un riferimento esterno come una CALL. in questo caso la cpu sa che quell' op code corrisponde a una call e sa come eseguirla ma senza il linkaggio non sa cosa eseguire
Ho capito,ma nel file oggetto nn ci sono gli inidrizzi di memoria delle istruzione,ciò avviene solo attraverso il linker.Ho capito che se c'è una ADD la CPU capisce l'istruzione,ma se nn sa a quale indirizzo lavorare?devilheart
è proprio quello che volevo dire, sia con il primo che con il mio penultimo post. la cpu è perfettamente in grado di comprendere il file oggetto prodotto dal compilatore (ma non di eseguirlo). torniamo all'esempio della CALL; quando nel file oggetto c'è l'opcode di questa istruzione, la cpu sa che è una chiamata a procedura e sa anche come comportarsi ovvero prima di saltare all'indirizzo specificato deve salvare il contesto nello stack. ovviamente senza il linking l'indirizzo sarà fittizio e non punterà alla procedura richiesta (a meno di una botta di culo)