Es gibt keine Datei mit dem Namen bits/c++config.h
im C++ - Include-Verzeichnis, die von der cstring
-Headerdatei benötigt wird. Aber wenn ich den Header cstring
einbinde und mit g++
kompiliere, wird mir kein Fehler angezeigt. Das Problem trat auf, als ich das Programm mit dem clang++
-Compiler auf folgende Weise kompilieren wollte.
$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>
Ich verwende g ++ 4.6.1 auf Ubuntu 11.04
Was schief gelaufen ist?
Die Datei bits/c++config.h
ist das plattformspezifische Include relativ zum aktuellen Compiler. Sie wird also in einem anderen Verzeichnis versteckt und standardmäßig von g ++ durchsucht, aber nicht von clang ++, wie es scheint.
Wenn Sie locate c++config.h
ausführen, werden auf meinem Computer die folgenden (relevanten) Dateien angezeigt:
/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
Der erste ist für 64-Bit und der zweite für 32-Bit.
Fügen Sie einfach -I/usr/include/c++/4.6/i686-linux-gnu
oder -I/usr/include/c++/4.6/i686-linux-gnu/64
oder was auch immer Sie für Ihre Plattform benötigen, hinzu.
Es hängt damit zusammen, wie clang ++ die Header-Dateien durchsucht.
Ein Beispiel-Patch für Fedora 15, 4 Monate zuvor, finden Sie hier .
Siehe Red Hat Bugzilla post für weitere Informationen.