2012-02-08 6 views
19

No hay un archivo llamado bits/c++config.h en el directorio de inclusión de C++ requerido por el archivo de encabezado cstring. Pero cuando incluyo el encabezado cstring y compilo con g++, no me da error. El problema ocurrió cuando intenté compilar el programa con el compilador clang++ de la siguiente manera.g ++ 4.6 problema no hay archivo <bits/C++ config.h> requerido por el encabezado cstring

$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> 

estoy usando g ++ 4.6.1 en Ubuntu 11.04

¿Qué salió mal?

+0

podría proporcionar más detalles, como por ejemplo: ¿qué versión de gcc usas? en que sistema operativo? y cual es tu linea de comando gcc? – Coren

Respuesta

29

El archivo bits/c++config.h es la plataforma específica incluida en relación con el compilador actual, por lo que está oculta en otro directorio, buscada por defecto por g ++, pero no por clang ++, como parece.

En mi máquina, corriendo locate c++config.h da los archivos siguientes (pertinentes):

/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 

La primera es para 64-bits y el segundo para 32-bits.

Así que solo agregue -I/usr/include/c++/4.6/i686-linux-gnu o -I/usr/include/c++/4.6/i686-linux-gnu/64 o lo que necesite para su plataforma.

+0

sí descubrí que está en el mismo directorio de lo que tienes. gracias –

+1

Si no tiene la configuración C++ apropiada para su arquitectura, instale libstdC++ - devel desde su repositorio. –

+0

en algunos casos esto podría no ser suficiente: a veces se necesita -I/usr/include/C++/4.6/i686-linux-gnu/C++/4.6 Uso -I/usr/include/i386-linux-gnu/C++/4.7/para mi máquina y la versión 4.7 de gcc y todo funciona –

0

Puede relacionarse con cómo clang ++ busca en sus archivos de encabezados.

Encontrará un parche de muestra de cómo lo arreglan para fedora 15, hace 4 meses, here.

Consulte este red hat bugzilla post para obtener más información.

+0

Al instalar clang edité el archivo Frontend/InitHeaderSearch.cpp para incluir los directorios necesarios para solucionar el problema. Todavía tengo este error. Por ahora, he agregado todas las rutas requeridas en mi CMakeLists.txt para resolver este problema. –

Cuestiones relacionadas