2012-12-06 6 views
9

Mam problem z uzyskaniem nawet prostego świata hello do kompilacji z clangiem jeśli włączę C++ 11 i libC++. Na przykład poniższy kodUżywanie klanga z libC++ i C++ 11 z linii poleceń z mac os x

#include <iostream> 

int main() 
{ 
    std::cout << "Hello, World!" << std::endl; 
    return 0; 
} 

daje następujące wyjście z kompilacji gdy uruchomię clang++ -std=c++11 -stdlib=libc++ main.cpp

In file included from main.cpp:1: 
In file included from /usr/bin/../lib/c++/v1/iostream:38: 
In file included from /usr/bin/../lib/c++/v1/ios:216: 
In file included from /usr/bin/../lib/c++/v1/__locale:15: 
In file included from /usr/bin/../lib/c++/v1/string:434: 
In file included from /usr/bin/../lib/c++/v1/algorithm:591: 
/usr/bin/../lib/c++/v1/type_traits:165:12: error: unknown type name 
     '_LIBCPP_CONSTEXPR' 
    static _LIBCPP_CONSTEXPR const _Tp  value = __v; 
     ^
/usr/bin/../lib/c++/v1/type_traits:165:30: error: expected member name or ';' 
     after declaration specifiers 
    static _LIBCPP_CONSTEXPR const _Tp  value = __v; 
    ~~~~~~~~~~~~~~~~~~~~~~~~^
/usr/bin/../lib/c++/v1/type_traits:169:9: error: unknown type name 
     '_LIBCPP_CONSTEXPR' 
     _LIBCPP_CONSTEXPR operator value_type() const {return value;} 
     ^
/usr/bin/../lib/c++/v1/type_traits:169:63: error: use of undeclared identifier 
     'value' 
     _LIBCPP_CONSTEXPR operator value_type() const {return value;} 
                  ^
/usr/bin/../lib/c++/v1/type_traits:173:1: error: unknown type name 
     '_LIBCPP_CONSTEXPR' 
_LIBCPP_CONSTEXPR const _Tp integral_constant<_Tp, __v>::value; 
^ 
/usr/bin/../lib/c++/v1/type_traits:173:19: error: expected unqualified-id 
_LIBCPP_CONSTEXPR const _Tp integral_constant<_Tp, __v>::value; 
       ^
/usr/bin/../lib/c++/v1/type_traits:730:2: error: is_base_of not implemented. 
#error is_base_of not implemented. 
^ 
/usr/bin/../lib/c++/v1/type_traits:400:56: error: no member named 'value' in 
     'std::__1::is_integral<void>' 
    : public integral_constant<bool, is_integral<_Tp>::value  || 
            ~~~~~~~~~~~~~~~~~~^ 
/usr/bin/../lib/c++/v1/type_traits:941:19: note: in instantiation of template 
     class 'std::__1::is_arithmetic<void>' requested here 
       (is_arithmetic<_A2>::value || is_void<_A2>::value) && 
       ^
/usr/bin/../lib/c++/v1/type_traits:949:22: note: in instantiation of default 
     argument for '__promote<type-parameter-0-0, void, void>' required here 
    typedef typename __promote<_A1>::type __type1; 
        ^~~~~~~~~~~~~~ 
/usr/bin/../lib/c++/v1/type_traits:949:38: error: expected a qualified name 
     after 'typename' 
    typedef typename __promote<_A1>::type __type1; 
            ^
/usr/bin/../lib/c++/v1/type_traits:949:42: error: expected ';' at end of 
     declaration list 
    typedef typename __promote<_A1>::type __type1; 
             ^
/usr/bin/../lib/c++/v1/type_traits:941:39: error: no member named 'value' in 
     'std::__1::is_arithmetic<void>' 
       (is_arithmetic<_A2>::value || is_void<_A2>::value) && 
        ~~~~~~~~~~~~~~~~~~~~^ 
/usr/bin/../lib/c++/v1/type_traits:950:22: note: in instantiation of default 
     argument for '__promote<type-parameter-0-1, void, void>' required here 
    typedef typename __promote<_A2>::type __type2; 
        ^~~~~~~~~~~~~~ 
/usr/bin/../lib/c++/v1/type_traits:950:38: error: expected a qualified name 
     after 'typename' 
    typedef typename __promote<_A2>::type __type2; 
            ^
/usr/bin/../lib/c++/v1/type_traits:950:42: error: expected ';' at end of 
     declaration list 
    typedef typename __promote<_A2>::type __type2; 
             ^
/usr/bin/../lib/c++/v1/type_traits:941:39: error: no member named 'value' in 
     'std::__1::is_arithmetic<void>' 
       (is_arithmetic<_A2>::value || is_void<_A2>::value) && 
        ~~~~~~~~~~~~~~~~~~~~^ 
/usr/bin/../lib/c++/v1/type_traits:951:38: error: expected a qualified name 
     after 'typename' 
    typedef typename __promote<_A3>::type __type3; 
            ^
/usr/bin/../lib/c++/v1/type_traits:951:42: error: expected ';' at end of 
     declaration list 
    typedef typename __promote<_A3>::type __type3; 
             ^
/usr/bin/../lib/c++/v1/type_traits:953:22: error: use of undeclared identifier 
     '__type1' 
    typedef decltype(__type1() + __type2() + __type3()) type; 
        ^
/usr/bin/../lib/c++/v1/type_traits:953:34: error: use of undeclared identifier 
     '__type2' 
    typedef decltype(__type1() + __type2() + __type3()) type; 
           ^
/usr/bin/../lib/c++/v1/type_traits:953:46: error: use of undeclared identifier 
     '__type3' 
    typedef decltype(__type1() + __type2() + __type3()) type; 
              ^
fatal error: too many errors emitted, stopping now [-ferror-limit=] 
20 errors generated. 

kod zostanie skompilowany w porządku, jeśli mogę użyć Xcode i ustawić opcje dla libC++ i C++ 11 wsparcie.

Dziękuję za wszelkie odpowiedzi

+0

Co 'dzyń ++ -V' powiedzieć? –

+0

'Apple clang wersja 4.0 (tagi/Apple/clang-421.0.60) (w oparciu o LLVM 3.1svn) Target: x86_64-apple-darwin11.4.2 Model gwintu: posix' –

+0

Clang 4.0 jest nieaktualny. Powinieneś mieć 4.1. Jaką wersję Xcode zainstalowałeś? –

Odpowiedz

14

Twoje narzędzia wiersza polecenia są nieaktualne. Clang 4.0 dostarczany z Xcode 4.4. Chcesz Clang 4.1, który jest dostarczany z Xcode 4.5. Po zainstalowaniu Xcode, możesz przejść do okna Preferencje, wybrać okienko Pobieranie i zakładkę Komponenty, a tam jest wpis "Narzędzia wiersza poleceń". Po prawej stronie pojawi się przycisk "Install".

enter image description here