2012-04-06 10 views
8

Ich habe clang und llvm von der Quelle installiert und versuche, einige C++ - Code mit Funktionen des neuen Standards zu kompilieren.Inklusive C++ 11 Header mit Clang/LLVM

Ich habe festgestellt, dass zum Beispiel die Verwendung von Bereichen, z.B. for (i : vector) funktioniert gut, ich habe Probleme (kann Header-Datei nicht finden), wenn ich einen Header z. <unordered_set> oder <tuple>.

Muss ich die neue libC++ verwenden, um diese Header zu verwenden, oder gibt es nur eine einfache Buildänderung, die ich vornehmen muss? Im Moment habe ich gerade call und llvm in einen Ordner in meinem Home-Verzeichnis eingebaut und rufe von da an callg ++ an.

Antwort

4

Während die Standard-Bibliothek mit Verteilungen von Ihrem Compiler kommt, wenn Sie es selbst Gebäude sind, müssen Sie noch die Standard-Bibliothek selbst bauen. Einige seiner Komponenten können nur Header sein, aber nicht alle von ihnen.

Sie müssen also zumindest die Bibliothek herunterladen, wenn sie nicht gebaut werden. Clang kann GCCs libstdC++ verwenden, aber sie haben auch ihr libC++ - Projekt.

11

Siehe http://clang.llvm.org/get_started.html.

Wenn Sie vorhaben, mit Clang C++ zu arbeiten, müssen Sie ihm möglicherweise mitteilen, wie Sie Ihre C++ - Standardbibliotheks-Header finden. Wenn Clang nicht Ihr System libstdC++ Header finden können, folgen Sie bitte folgenden Anweisungen:

  • gcc -v -x C++/dev/null -fsyntax-only den Weg zu bekommen.

  • Suchen Sie den Kommentar "FIXME: temporärer Hack: hartcodierte Pfade" in Klirren/lib/Frontend/InitHeaderSearch.cpp und die folgenden Zeilen ändern, dass der Pfad zu schließen.

+0

Ok, aber es scheint nur ein Problem mit den Headern aus dem neuen Standard zu sein. – zenna

+0

ah ha, das kann sein, weil mein g ++ 4.6 in einem nicht standardmäßigen Ort ist – zenna