2012-12-06 62 views
9

Tôi gặp khó khăn khi nhận được một thế giới hello đơn giản để biên dịch với tiếng kêu nếu tôi bật C++ 11 và libC++. Ví dụ đoạn mã sauSử dụng clang với libC++ và C++ 11 từ dòng lệnh với mac os x

#include <iostream> 

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

Tạo đầu ra sau đây từ các biên dịch khi tôi chạy 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. 

Mã sẽ biên dịch tốt nếu tôi sử dụng xcode và thiết lập các tùy chọn cho libC++, C++ 11 ủng hộ.

Cảm ơn bạn đã trả lời

+0

'clang ++ -v' nói gì? –

+0

'Phiên bản Apple clang 4.0 (thẻ/Apple/clang-421.0.60) (dựa trên LLVM 3.1svn) Mục tiêu: x86_64-apple-darwin11.4.2 Mô hình chủ đề: posix' –

+0

Clang 4.0 đã lỗi thời. Bạn nên có 4.1. Bạn đã cài đặt phiên bản Xcode nào? –

Trả lời

14

Công cụ dòng lệnh của bạn đã lỗi thời. Clang 4.0 được chuyển bằng Xcode 4.4. Bạn muốn Clang 4.1, mà tàu với Xcode 4.5. Sau khi cài đặt Xcode, bạn có thể vào cửa sổ Preferences, chọn panel Downloads, và thẻ Components, và có một mục nhập cho "Command Line Tools". Sẽ có một nút ở bên phải có nội dung "Cài đặt".

enter image description here

Các vấn đề liên quan