Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Using clang with libc++ and c++11 from the command line with mac os x

I am having trouble getting even a simple hello world to compile with clang if I enable c++11 and libc++. For example the following code

#include <iostream>

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

Produces the following output from the compile when I run 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.

The code will compile fine if I use xcode and set the options for libc++ and c++11 support.

Thank you for any replies

like image 505
Little Bear Avatar asked Dec 06 '12 20:12

Little Bear


People also ask

How do I enable C++ 11 on my Mac?

Go to property of the project --> c/c++ build --> settings --> cross gcc compiler and cross g++ compiler. Put -std=c++11 under miscellaneous part of both tabs. Click Apply.

Does Apple clang support C ++ 17?

You can use Clang in C++17 mode with the -std=c++17 option (use -std=c++1z in Clang 4 and earlier).

Does Apple clang support C ++ 20?

Its contributors include Apple, Microsoft, Google, ARM, Sony, Intel, and AMD. Clang 14, the latest major version of Clang as of March 2022, has full support for all published C++ standards up to C++17, implements most features of C++20, and has initial support for the upcoming C++23 standard. Since v6.


1 Answers

Your command-line tools are out of date. Clang 4.0 shipped with Xcode 4.4. You want Clang 4.1, which ships with Xcode 4.5. After installing Xcode, you can go to the Preferences window, select the Downloads pane, and the Components tab, and there's an entry for "Command Line Tools". There will be a button on the right side that says "Install".

enter image description here

like image 191
Lily Ballard Avatar answered Nov 15 '22 13:11

Lily Ballard