Wenn C ++ 11 mit stdlibc ++ 4.7 aktiviert wird, tritt ein Clam-Fehler auf, während gcc kompiliert wird

8

Ich habe versucht, C ++ 11 zum Laufen zu bringen, nachdem ich verschiedene Websites und Q / A durchstöbert habe, habe ich immer noch Probleme damit. Ich möchte clang mit libstdc ++ verwenden. Es ist im Clang-Status angegeben, dass es mit Patch unterstützt wird - Ссылка . Ich lade die gcc4.7 von Macports herunter und führe entsprechende Änderungen in den Kopfzeilen für gcc4.7 durch

Der Grund, warum ich libc ++ nicht benutze, ist, weil ABI-Kompatibilitäten zwischen libc ++ und libstdc ++, die von diesem Thread angezeigt werden: Warum kann ich nicht mit libc ++ im C ++ 0x-Modus verlinken? Dieses boost :: program_options-Beispiel?

OK, nachdem alles fertig ist, habe ich mein Setup mit dem folgenden Code getestet:

%Vor%

Ich erwarte, dass include unter c ++ 11 funktionieren sollte.

Also hier ist, wie ich es kompiliere mit: mit GCC

%Vor%

Erfolgreich kompilieren

mit Clang

%Vor%

Ich erhalte diesen Fehler:

%Vor%

Ich benutze die clang-Version:

%Vor%

Mache ich etwas falsch? oder ist das ein Clang-Problem mit dem letzten gcc 4.7 libstc ++?

    
Negative Zero 25.04.2012, 01:22
quelle

3 Antworten

8

Warum sagst du -I/opt/local/include/gcc47/c++ ?

Das sollte bei GCC oder Clang nicht notwendig sein und wird nicht funktionieren. Nicht alle libstdc ++ - Header befinden sich unter diesem Pfad. An anderen Stellen gibt es einige wichtige Header, die Dinge wie _GLIBCXX_BEGIN_NAMESPACE_VERSION

definieren

Es scheitert nicht mit GCC, weil GCC bereits weiß, wie die anderen Header zu finden sind. Daher ist es überflüssig, die Optionen -I und -L explizit zu verwenden. Es funktioniert nicht mit Clang, weil Sie es nur sagen, wie Sie einige der Header finden, die es benötigt, aber nicht sagen, wie man den Rest findet.

Beenden Sie den Versuch, die Standardbibliothekspfade des Compilers zu überschreiben, und verwenden Sie die integrierten Pfade, von denen sie bereits weiß.

    
Jonathan Wakely 06.05.2012, 13:32
quelle
7

Ich verwende clang-3.1 mit gcc4.6 libstdc ++ unter FreeBSD 9.0 / AMD64. Es funktioniert mit diesen Optionen:

%Vor%

Ich nehme an, dass Ihr Problem möglicherweise gelöst ist, um diese Optionen zu verwenden:

%Vor%     
Yasuhiro Fujii 23.05.2012 06:28
quelle
0

Sie können die spezielle Option -gcc-toolchain , die implizit durch --with-gcc-toolchain beim Kompilieren von clang gesetzt wird. Es ist ein bisschen einfacher als neu kompilieren, wenn Sie eine andere GCC-Bibliotheken verwenden möchten:)

So:

%Vor%

Oder, in Ihrem Fall (ich weiß, es ist 4 Jahre alt :)) scheint es

zu sein %Vor%

Der Ordner 'toolchain' sollte die Ordner 'include' und 'lib' enthalten. Compiler und Linker verwenden diese Option. Seien Sie vorsichtig: --gcc-toolchain ist keine gültige Option, verwenden Sie einen Strich als Präfix (obwohl llvm wiki gibt etwas anderes an - ich habe es am 3.8-Stamm überprüft.

    
gluk47 14.01.2016 15:03
quelle

Tags und Links