c++ -std=c++11 -stdlib=libc++ geben Fehler auf osx lion
Diese soll eine doppelte Frage. Aber ich habe gegoogelt sehr viel und habe nicht gefunden, ein Treffer der das behebt mein Problem.
Ich versuche, einen c++11-standard-feature bei osx lion und es funktioniert nicht. Ich glaube, diese Funktion wird als Liste Initialisierungen. nach http://clang.llvm.org/cxx_status.html Dieses feature wurde in clang 3.1, das ist die version, die ich verwende.
Unten ist die shell-o/p erklären meine einfachen test. Kann mir jemand sagen was ich falsch mache? Bin ich zu vergessen eine Flagge?
Ist der compiler:
:tmp$ c++ --version
Apple clang version 3.1 (tags/Apple/clang-318.0.61) (based on LLVM 3.1svn)
Target: x86_64-apple-darwin11.4.2
Thread model: posix
:tmp$ which c++
/usr/bin/c++
:tmp$ ls -alt /usr/bin/c++
lrwxr-xr-x 1 root wheel 7 Jul 12 13:17 /usr/bin/c++ -> clang++
OS ist
:tmp$ uname -a
Darwin .local 11.4.2 Darwin Kernel Version 11.4.2: Thu Aug 23 16:25:48 PDT 2012; root:xnu-1699.32.7~1/RELEASE_X86_64 x86_64
Die test-Datei ist
:tmp$ cat test.cpp
#include <vector>
int main(){
std::vector<int> vec1 {1,2,3};
std::vector<int> vec2={1,2,3};
}
Den compiler-output ist
:tmp$ c++ -std=c++11 test.cpp
test.cpp:4:20: error: non-aggregate type 'std::vector<int>' cannot be
initialized with an initializer list
std::vector<int> vec1 {1,2,3};
^ ~~~~~~~
test.cpp:5:20: error: non-aggregate type 'std::vector<int>' cannot be
initialized with an initializer list
std::vector<int> vec2={1,2,3};
^ ~~~~~~~
2 errors generated.
Ok ich wollte nicht zu bekommen, weil es das folgende nimmt sich viel zu format richtig auf stackoverflow. Aber das hinzufügen -stdlib=c++ schafft noch mehr Probleme. Jetzt bekomme ich 14 Fehler.
:tmp$ c++ -std=c++11 -stdlib=libc++ test.cpp
In file included from test.cpp:1:
In file included from /usr/bin/../lib/c++/v1/vector:261:
In file included from /usr/bin/../lib/c++/v1/__bit_reference:15:
In file included from /usr/bin/../lib/c++/v1/algorithm:591:
/usr/bin/../lib/c++/v1/type_traits:737:2: error: #error is_base_of not
implemented.
#error is_base_of not implemented.
^
/usr/bin/../lib/c++/v1/type_traits:1700:13: error: use of undeclared identifier
'is_base_of'
is_base_of<_Class, typename remove_reference<_Tp>::type>::value>
^
/usr/bin/../lib/c++/v1/type_traits:1700:24: error: '_Class' does not refer to a
value
is_base_of<_Class, typename remove_reference<_Tp>::type>::value>
^
/usr/bin/../lib/c++/v1/type_traits:1697:28: note: declared here
template <class _Rp, class _Class, class _Tp>
^
/usr/bin/../lib/c++/v1/type_traits:1700:62: error: expected class name
is_base_of<_Class, typename remove_reference<_Tp>::type>::value>
^
In file included from test.cpp:1:
In file included from /usr/bin/../lib/c++/v1/vector:261:
In file included from /usr/bin/../lib/c++/v1/__bit_reference:15:
In file included from /usr/bin/../lib/c++/v1/algorithm:594:
In file included from /usr/bin/../lib/c++/v1/memory:590:
In file included from /usr/bin/../lib/c++/v1/typeinfo:61:
/usr/bin/../lib/c++/v1/exception:194:20: error: use of undeclared identifier
'is_base_of'
!is_base_of<nested_exception, typename ...
^
/usr/bin/../lib/c++/v1/exception:194:31: error: 'nested_exception' does not
refer to a value
!is_base_of<nested_exception, typename ...
^
/usr/bin/../lib/c++/v1/exception:166:29: note: declared here
class _LIBCPP_EXCEPTION_ABI nested_exception
^
/usr/bin/../lib/c++/v1/exception:194:81: error: parameter declarator cannot be
qualified
...typename remove_reference<_Tp>::type>::value
~~^
/usr/bin/../lib/c++/v1/exception:194:85: error: expected ')'
...typename remove_reference<_Tp>::type>::value
^
/usr/bin/../lib/c++/v1/exception:192:18: note: to match this '('
throw_with_nested(_Tp&& __t, typename enable_if<
^
/usr/bin/../lib/c++/v1/exception:213:19: error: use of undeclared identifier
'is_base_of'
is_base_of<nested_exception, typename ...
^
/usr/bin/../lib/c++/v1/exception:213:30: error: 'nested_exception' does not
refer to a value
is_base_of<nested_exception, typename ...
^
/usr/bin/../lib/c++/v1/exception:166:29: note: declared here
class _LIBCPP_EXCEPTION_ABI nested_exception
^
/usr/bin/../lib/c++/v1/exception:213:80: error: parameter declarator cannot be
qualified
...typename remove_reference<_Tp>::type>::value
~~^
/usr/bin/../lib/c++/v1/exception:213:84: error: expected ')'
...typename remove_reference<_Tp>::type>::value
^
/usr/bin/../lib/c++/v1/exception:211:18: note: to match this '('
throw_with_nested(_Tp&& __t, typename enable_if<
^
test.cpp:4:20: error: non-aggregate type 'std::vector<int>' cannot be
initialized with an initializer list
std::vector<int> vec1 {1,2,3};
^ ~~~~~~~
test.cpp:5:20: error: non-aggregate type 'std::vector<int>' cannot be
initialized with an initializer list
std::vector<int> vec2={1,2,3};
^ ~~~~~~~
14 errors generated.
- möglich, Duplikat der Wie bekomme ich die neuen C++ threading-Unterstützung in Mac OS X mit clang? und siehe auch stackoverflow.com/a/14150421/981959 für eine ausführliche Erklärung
- Der zweite Fehler scheint ein bug in der libc++, es nicht implementieren die Funktionen, die Sie verwenden. Probieren Sie ein Upgrade auf LLVM/Clang/libc++ 3.2
- Und zum formatieren einer ganzen block richtig fügen Sie einfach es in, und wählen Sie dann den ganzen block und drücken Sie Strg + K (oder die {} - Symbol über der textbox)
- Ich habe die neuste version von XCode für Lion. Bedeutet das XCode auf Lion ist gebrochen? Ich will nicht, um ein upgrade für mein OS oder gehen Sie entlang der darwin-ports route.
- Vielen Dank für die block-Kommentar-Tipp auch.
- Beachten Sie, dass "Apple clang version 3.1" ist nicht das gleiche wie "LLVM-Clang 3.1". Auf Mountain Lion, die Sie erhalten würden "Apple clang version 4.0", auch "basierend auf LLVM 3.1".
Du musst angemeldet sein, um einen Kommentar abzugeben.
Hinzufügen
-stdlib=libc++
zu Ihrem compiler-flags. Sehen dieser Beitrag für eine Erklärung.Die version, die Sie verwenden, ist:
Obwohl diese sagt, '3.1' es ist nicht eigentlich das gleiche '3.1' genannt C++ status-Seite Sie sah. Die Apple-Versionen und die LLVM.org Versionen sind im wesentlichen nicht.
Apple clang version 3.1 ist "basiert auf LLVM 3.1 svn" das heißt, es basiert auf einer pre "LLVM.org 3.1" revision in der LLVM.org source-code-repository und kann nicht alle features des endgültigen LLVM.org 3.1-release.
Apple clang 3.1 ist eine Art von alt. Seitdem LLVM.org produziert hat "3.1" und "3.2" veröffentlicht, und Apple produziert bis zu "Apple clang 4.1", denke ich. Sie sollten entweder update von Xcode oder sehen, ob es eine neuere version von clang installiert woanders.
Die Lösung
Speziell, ich hatte zu gehen, um XCode preferences->Downloads und installieren Sie das "Command Line Tools". Dass das problem behoben.
Die Erklärung
Was passiert ist, war ein einfacher Fall von veralteter software. Seit OSX war up-to-date (durch software-update), bin ich davon ausgegangen, alle XCode und der compiler-updates sind ebenfalls im Ort. Das war nicht der Fall.
Hinweis im Kommentar auf die Frage, sagte ich, "ich habe die neueste version von XCode für Lion." Habe ich aber nicht.(bames53 anspielt, der in seiner Antwort), Nur weil Sie nicht über neue updates in der OSX software update heißt nicht, dass Sie die neueste XCode compiler. Aktualisieren Sie es über XCode Preferences.
Mit der Hilfe von Jonathan ' s feedback und einige mehr googeln, Mit clang mit libc++ und c++11 von der Befehlszeile aus mit mac os x behoben mein problem.
Diese tatsächlich aktualisiert, die llvm-toolchain.