Ottenere Clang per lavorare su Windows

Ho seguito la seguente guida passo passo e sono riuscito, dopo un po ‘di giocherellare, a ottenere clang per compilare usando codice: blocks e MinGW. Ottimo, quindi ora posso aggiungere il modulo Clang a eclipse (perché avere un IDE quando ne puoi avere quattro) e iniziare la compilazione.

Posso compilare un semplice programma che non usa la libreria standard ma sfortunatamente quando provo a compilare questo:

#include  using namespace std; int main() { cout << "!!!Hello World!!!" << endl; // prints !!!Hello World!!! return 0; } 

prima di tutto ottengo questo:

.. \ src \ test.cpp: 9: 10: errore fatale: file ‘iostream’ non trovato

quindi aggiungo le intestazioni Mingw al percorso di inclusione; quindi ho capito:

‘errore fatale:’ bit / c ++ config.h ‘file non trovato’

che è strano Perché MingW funziona se quel file non è in ‘bit /’? È integrato nel compilatore ?. Non importa, trovo un’implementazione e creo il file in ‘bits /’.

Poi ho una tempesta di errori, compresi quelli strani che sembrano suggerire che Clang non implementa correttamente il preprocessore, altrimenti la mia comprensione del preprocessore non è corretta.

 C:\Program Files\CodeBlocks\MinGW\lib\gcc\mingw32\4.4.1\include\c++/cwchar:45:26: error: expected value in expression #if _GLIBCXX_HAVE_WCHAR_H 

e molti altri ancora. Dovrebbe essere

 #if defined(_GLIBCXX_HAVE_WCHAR_H) 

o

 #ifdef _GLIBCXX_HAVE_WCHAR_H? 

Se lo sono, le librerie standard MinGW sono sbagliate.

Suppongo di non essere corretto nell’assumere che il clang possa essere inserito per sostituire gcc e che non sia progettato per funzionare con le librerie standard di GNU. Qualsiasi conferma o negazione di questo, supportata da prove sarebbe molto gradita!

Quindi, qualcuno ha un modo infallibile per ottenere clang compilazione su un PC Windows? C’è una carenza di informazioni online per quanto riguarda clang e in particolare per quanto riguarda Windows.

Sono davvero entusiasta di fare clang e LLVM lavorando come suonano alla grande da quello che ho letto. Qualsiasi aiuto sarebbe apprezzato.

Grazie.

Ci sono alcune istruzioni per build clang su questa pagina (nascoste nella parte “Clang Development” della barra laterale …). Per MinGW si desidera la sezione chiamata “Su sistemi Unix-like”. L’unica parte difficile è il passaggio 5 che spiega come impostare i percorsi per la libreria standard C ++. Questi devono essere aggiunti al codice in clang/lib/Frontend/InitHeaderSearch.cpp . Sulla mia macchina è finita così

 // FIXME: temporary hack: hard-coded paths. AddPath("/usr/local/include", System, true, false, false); AddPath("c:/msysgit/mingw/bin/../lib/gcc/mingw32/4.4.0/include/c++", System, true, false, false); AddPath("c:/msysgit/mingw/bin/../lib/gcc/mingw32/4.4.0/include/c++/mingw32", System, true, false, false); AddPath("c:/msysgit/mingw/bin/../lib/gcc/mingw32/4.4.0/include/c++/backward", System, true, false, false); AddPath("c:/msysgit/mingw/bin/../lib/gcc/mingw32/4.4.0/../../../../include", System, true, false, false); AddPath("c:/msysgit/mingw/bin/../lib/gcc/mingw32/4.4.0/include", System, true, false, false); AddPath("c:/msysgit/mingw/bin/../lib/gcc/mingw32/4.4.0/include-fixed", System, true, false, false); 

anche se non sono sicuro che tutti questi siano necessari!

A seconda della versione di MinGW (e quindi della versione di gcc ported), le intestazioni potrebbero essere disperse un po ‘…

Nel file clang/lib/Frontend/InitHeaderSearch.cpp troverai una serie di percorsi hard-coded. Il problema è che ognuno è specifico della versione, quindi se la tua versione di MinGW non è lì, sentiti libero di aggiungerla (e chiedi che sia integrata nella mainline di Clang pubblicando la patch su cfe-commit).

Personalmente lo eseguo su MinGW / msys con solo piccoli problemi (un certo numero di casi di test falliscono perché la mia shell di msys manipola l’input quando ci sono : in …), non ho provato ad usarlo da CodeBlocks (sono abituato alla riga di comando).

Se desideri aiutare, Takumi sta monitorando l’integrazione con MinGW, Francois Pichet sta conducendo il lavoro sulla compatibilità con le intestazioni VC ++ / MFC (cioè è il principale contributore) e @rubenvb sta attualmente cercando di spingere le patch su libc ++ per farlo funzionare su Windows (libc ++ non è ancora compilato su Windows). Le 3 aree sono praticamente indipendenti e richiedono competenze e conoscenze diverse.

Ho avuto un problema simile. Ho usato gli analoghi di GCC 4.7 dei percorsi specificati dalla risposta di Mike Dinsdale e li ho specificati con il flag ‘-isystem’ (Clang 3.2 nella distribuzione mingw64 come costruito da rubenvb) a tutte le mie future chiamate all’eseguibile clang (via script). Poiché queste directory vengono specificate esplicitamente come directory di inclusione del sistema , tutti gli avvisi potenzialmente faticosi generati da essi vengono automaticamente soppressi.

tl; dr: il flag -isystem specifica le directory di inclusione del sistema senza ricompilazione in Clang

Clang ha posizioni di ricerca hardcoded, come definito nel file clang/lib/Frontend/InitHeaderSearch.cpp , vicino al commento FIXME: temporary hack: hard-coded paths hardcoded.

C’è una nota a riguardo in questa pagina: http://clang.llvm.org/get_started.html

Quindi prendi i percorsi di inclusione dal tuo altro compilatore (MingW), e hardcode in Clang, e potrebbe funzionare. (Non sono sicuro che il supporto per Windows di Clang sia già al 100%)

Ho avuto lo stesso errore con Fedora Linux. La soluzione suggerita era quella di ottenere una versione successiva di Clang (stavo usando 2.8) o anche compilarlo dal trunk. Non l’ho provato

Windows 10 / VS 2017 / Clang 4.0.0 mancante stdlib.h nel codice C. Ecco come l’ho risolto:

  • Apri il x86_x64 Cross Tools Command Prompt for VS 2015/2016/2017 . L’esecuzione di clang qui dovrebbe eliminare l’errore “header mancanti”.
  • Se ancora non funziona, mancano le intestazioni e / o le librerie effettive, poiché Clang lascia queste specifiche della piattaforma a VS o MinGW. Andare su \Program Files (x86)\Windows Kits\10\Include\ e cercare le sue sottodirectory (se presenti) per stdlib.h e co. Se non viene trovato, sarà necessario installare l’ultimo Windows 10 SDK di Windows 10 SDK andando in Visual Studio (programma di installazione) e facendo clic su Modifica per aggiungere pacchetti.

Quando ho avuto lo stesso problema, ho appena installato Code Blocks nelle directory di inclusione corrette per il mio setup. E usa -I con clang ++ e tutto ha funzionato alla grande finora.