Una cosa che davvero non capisco riguarda la funzione di clang, se clang è la parte front-end del compilatore, dovrebbe solo fare in modo che il parser funzioni per il codice sorgente, il lavoro restante sarà fatto da LLVM. Ma clang può produrre anche un file eseguibile. Quindi, come capirlo? Qual è la relazione tra clang e llvm?Se clang è il front-end di un compilatore, allora perché può produrre un file eseguibile?
risposta
Se si è molto specifici: l'eseguibile clang è un driver del compilatore. Invoca tutte le parti necessarie per produrre un eseguibile. Invoca libclang che fa i lavori front-end: parser/lexer, l'analisi semantica, costruzione dell'AST e generazione del codice. Quando l'AST viene abbassato a LLVM IR, i lavori front-end sono terminati e l'ottimizzatore e LLVM si attivano. Dopo aver ottimizzato il codice, il driver del compilatore invocherà il back-end LLVM specificato dalla destinazione e infine il linker che crea l'eseguibile. Ed è per questo che il compilatore clang può compilare eseguibili.
LLVM è un backend del compilatore che è stato scritto prima di clang, che in origine utilizzava il front-end di gcc in uno strumento chiamato 'llvm-gcc'. Clang è il nome del front-end, ma clang è anche il nome di uno strumento che include il front-end clang, ma eseguirà anche l'intero compilation per te. Le fasi successive della compilazione sono incorporate nello strumento clang come librerie o, se sono file eseguibili separati, sanno come richiamarli. Con i giusti argomenti della riga di comando, è possibile fare sosta clang parte modo attraverso
- -emit-ast appena fa il parsing e rende l'Abstract Syntax Albero
- -emit-LLVM rende la LLVM Intermedio rappresentanza, ma non trasformalo in codice per il tuo computer
Clang funzionerà come il driver per l'intera compilazione perché è ciò che i programmatori di solito vogliono, l'analizzato soure, l'oggetto generato, l'eseguibile realizzato. Volere che l'Abstract Syntax Tree ti sputi è abbastanza raro.
Ovviamente questo è il souce per tutte cosa LLVM http://llvm.org
Ecco un video di Chriss Lattner explaing ciò LLVM è https://www.youtube.com/watch?v=029YXzHtRy0. Chandler Carruth ha alcuni video su youtuble che spiegano parti di clang su cui ha lavorato.
Ci sono 3 significati di Clang:
- Il front-end (libclang)
- Il compilatore conducente (clang eseguibile)
- Il tradizionale compilatore. Questo non solo include il front-end, ma fa anche ampio uso di middle-end e back-end, o anche l'assemblatore integrato per completare la fase di compilazione. (il driver è composto principalmente da compilation e link)
- 1. controllo se un file è eseguibile
- 2. Un programma C può modificare il suo file eseguibile?
- 3. Cosa può impedire al compilatore di produrre un'uscita della console
- 4. non può collegarsi con un file eseguibile principale
- 5. Come posso verificare se un file è eseguibile in node.js?
- 6. Come posso produrre un eseguibile Crystal senza dipendenze?
- 7. frontend al compilatore basato su LLVM
- 8. È possibile utilizzare il compilatore Go per distribuire un file eseguibile per altri sistemi operativi?
- 9. Un eseguibile può scoprire il proprio percorso? (Linux)
- 10. Un compilatore può spostare automaticamente un argomento di funzione se la funzione call è l'istruzione return?
- 11. Perché è necessario un file oggetto per generare un file eseguibile?
- 12. L'applicazione non può essere aperta perché manca il suo eseguibile
- 13. Verificare se un comando è in PATH/eseguibile come processo
- 14. findViewById() può produrre NullPointerException
- 15. Comprimere un file in un eseguibile ELF
- 16. Perché non il compilatore C# prendere un InvalidCastException
- 17. Ottieni le opzioni del compilatore da un eseguibile compilato?
- 18. Perché il compilatore non può ottimizzare std :: string concat?
- 19. E 'possibile produrre eseguibile haskell stand alone
- 20. Un compilatore ANSI C può rimuovere un ciclo di ritardo?
- 21. Come può un programma cancellare il proprio eseguibile
- 22. Impossibile eseguire l'cmd.exe eseguibile dell'attività specificato. Il processo non può accedere al file perché è utilizzato da un altro processo
- 23. Perché vs C++ 2010 compilatore produrre un codice assembly diverso per funzione simile
- 24. Qual è il valore più grande sizeof (T) può produrre?
- 25. Un checksum TCP può produrre un falso positivo? Se sì, come viene affrontato?
- 26. Come fare un file eseguibile nodo di shell, usando dattiloscritto
- 27. Perché il compilatore aggiunge un locale variabile
- 28. Android: perché i gestori pubblicano un eseguibile?
- 29. Perché Git Bash non può eseguire il mio eseguibile?
- 30. perché clang ++ si comporta in modo diverso da clang poiché il primo è un collegamento simbolico di quest'ultimo?
qual è la differenza tra LLVM IR e LLVM? – storen
LLVM IR è la rappresentazione intermedia che i front-end producono e i back-end si trasformano in un ISA distinto. LLVM è solo il nome del progetto. –