Come compilo C ++ con Clang?


97

Ho installato Clang utilizzando apt-get in Ubuntu e posso compilare correttamente i file C utilizzandolo. Tuttavia, non ho idea di come compilare C ++ attraverso di esso. Cosa devo fare per compilare C ++?

Risposte:


148

Il comando clangè per C e il comando clang++è per C ++.


48

Inoltre, per i posteri - Clang (come GCC) accetta l' -xinterruttore per impostare la lingua dei file di input, ad esempio,

$ clang -x c++ some_random_file.txt

Questo thread della mailing list spiega la differenza tra clange clang++bene: Differenza tra clang e clang ++


4
Ho avuto un errore del linker con clang -x c ++ quando ho compilato il file cpp con #include <iostream>. -lstdc ++ flag ha risolto questo problema.
Slav

1
Ora ho il codice sorgente di Clang davanti ai miei occhi. Durante la compilazione (su Windows), prima crea clang.exee quindi copia l'eseguibile in clang++.exe. Quindi è lo stesso eseguibile, solo in fase di esecuzione controlla il proprio nome per distinguere se comportarsi come compilatore C o C ++. HTH.
Serge Rogatch

Come una nota, l'opzione -x c++è stata molto utile per dare come -extra-argper clang-ordine , per costringerlo a trattare un file .h come contenente C ++ al posto di C.
Annuncio N

Questo è troppo limitante per essere effettivamente utile a meno che non si crei l'intera cosa dal sorgente. È meglio usare clang++e lasciare che rilevi il tipo di file che gli fornisci. Quando un progetto può contenere .cppi file, .llfile (LLVM ir) e .o, .a, .soe cosa no file da librerie di terze parti, clang -x c++sarà solo vomitare.
Sahsahae

47

Non so perché non esiste una risposta che affronti direttamente il problema. Quando si desidera compilare un programma C ++, è meglio usare clang++. Ad esempio, per me funziona quanto segue:

clang++ -Wall -std=c++11 test.cc -o test

Se compilato correttamente, produrrà il file eseguibile tested è possibile eseguire il file utilizzando ./test.

Oppure puoi semplicemente usare clang++ test.ccper compilare il programma. Produrrà un file eseguibile predefinito denominato a.out. Utilizzare ./a.outper eseguire il file.

L'intero processo è molto simile a g ++ se hai familiarità con g ++. Vedere questo post per verificare quali avvisi sono inclusi con l' -Wallopzione. Questa pagina mostra un elenco di flag diagnostici supportati da Clang.


4
Grazie per aver effettivamente risposto alla domanda.
Curyous

4

Ho avuto un problema simile durante la compilazione di Clang dai sorgenti (ma non con sudo apt-get install. Ciò potrebbe dipendere dalla versione di Ubuntu che stai utilizzando).

Potrebbe valere la pena controllare se è clang++possibile trovare le posizioni corrette delle librerie C ++:

Confronta i risultati di g++ -v <filename.cpp>e clang++ -v <filename.cpp>, in "#include <...> la ricerca inizia qui:".


0

soluzione 1:

  clang++ your.cpp

soluzione 2:

  clang your.cpp -lstdc++

soluzione 3:

   clang -x c++ your.cpp 
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.