2012-02-08 9 views
19

Non c'è alcun file chiamato bits/c++config.h nella directory include di C++ richiesta dal file di intestazione cstring. Ma quando includo l'intestazione cstring e compile con g++, non mi dà errore. Il problema si è verificato quando ho provato a compilare il programma con il compilatore clang++ nel modo seguente.g ++ 4.6 problema no <bits/C++ config.h> file come richiesto dal cstring dell'intestazione

$clang++ -cc1 -I/usr/include -I/usr/include/c++/4.6.1 -I/usr/lib/gcc/i686-linux-gnu/4.6.1 -I/usr/include/i386-linux-gnu -I opt_149739_build/include hello.cpp 

In file included from /media/space/hello.cpp:2: 
In file included from /media/space/opt_149739_build/include/clang/Driver/Driver.h:13: 
In file included from /media/space/opt_149739_build/include/clang/Basic/Diagnostic.h:17: 
In file included from /media/space/opt_149739_build/include/clang/Basic/DiagnosticIDs.h:18: 
In file included from /media/space/opt_149739_build/include/llvm/ADT/StringRef.h:14: 
/usr/include/c++/4.6.1/cstring:42:10: fatal error: 'bits/c++config.h' file not found 
#include <bits/c++config.h> 

Sto usando g ++ 4.6.1 su Ubuntu 11.04

Cosa è andato storto?

+0

potrebbe fornire maggiori dettagli, come ad esempio: quale versione di gcc usi? su quale sistema operativo? e qual è la tua riga di comando gcc? – Coren

risposta

29

Il file bits/c++config.h è la piattaforma specifica include relativa al compilatore corrente, quindi è nascosto in un'altra directory, ricercata per impostazione predefinita da g ++, ma non da clang ++, come sembra.

Nella mia macchina, in esecuzione locate c++config.h dà i seguenti file (rilevanti):

/usr/include/c++/4.6/i686-linux-gnu/64/bits/c++config.h 
/usr/include/c++/4.6/i686-linux-gnu/bits/c++config.h 

Il primo è per 64-bit e la seconda per 32-bit.

Quindi basta aggiungere -I/usr/include/c++/4.6/i686-linux-gnu o -I/usr/include/c++/4.6/i686-linux-gnu/64 o qualsiasi altra cosa necessaria per la propria piattaforma.

+0

sì ho scoperto che è lì nella stessa directory quello che hai ottenuto. grazie –

+1

Se non hai il C++ config.h appropriato per la tua architettura, installa libstdC++ - devel dal tuo repository. –

+0

in alcuni casi questo potrebbe non essere sufficiente: a volte è necessario -I/usr/include/C++/4.6/i686-linux-gnu/C++/4.6 Io uso -I/usr/include/i386-linux-gnu/C++/4.7/per la mia macchina e 4.7 versione di gcc e tutto funziona –

0

Può essere correlato a come clang ++ cerca i suoi file di intestazioni.

Troverete una patch di esempio su come la risolvono per fedora 15, 4 mesi fa, here.

Vedere questo red hat bugzilla post per ulteriori informazioni.

+0

Durante l'installazione di clang ho modificato il file Frontend/InitHeaderSearch.cpp per includere le directory richieste per risolvere il problema. Ho ancora questo errore. Per ora, ho aggiunto tutti i percorsi richiesti nel mio CMakeLists.txt per risolvere questo problema. –