Il n'y a pas de fichier appelé bits/c++config.h
dans le répertoire include c ++ requis par le fichier d'en-tête cstring
. Mais quand j'inclus l'en-tête cstring
et compile avec g++
, cela ne me donne pas d'erreur. Le problème est survenu lorsque j'ai essayé de compiler le programme avec le compilateur clang++
de la manière suivante.
$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>
J'utilise g ++ 4.6.1 sur Ubuntu 11.04
Qu'est ce qui ne s'est pas bien passé?
Le fichier bits/c++config.h
est l'inclusion spécifique à la plate-forme par rapport au compilateur actuel. Il est donc caché dans un autre répertoire, recherché par défaut par g ++, mais pas par clang ++, comme il semble.
En cours d'exécution, locate c++config.h
donne les fichiers (pertinents) suivants sur ma machine:
/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
Le premier est pour 64 bits et le second pour 32 bits.
Donc, ajoutez simplement -I/usr/include/c++/4.6/i686-linux-gnu
ou -I/usr/include/c++/4.6/i686-linux-gnu/64
ou ce dont vous avez besoin pour votre plate-forme.
Cela peut être lié à la façon dont clang ++ recherche ses fichiers d’en-têtes.
Vous trouverez un exemple de correctif indiquant comment ils corrigent ce problème pour Fedora il y a 15 mois, ici .
Voir ceci Red Hat bugzilla post pour plus d’informations.