Использование clang с libc ++ и c ++ 11 из командной строки с mac os x

У меня проблемы с получением даже простого hello world для компиляции с помощью clang, если я включаю c ++ 11 и libc ++. Например, следующий код

#include <iostream>

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

Производит следующий вывод из компиляции при запуске 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.

Код скомпилируется нормально, если я использую xcode и установлю параметры для поддержки libc ++ и c ++ 11.

Спасибо за любые ответы

9

Решение

Ваши инструменты командной строки устарели. Clang 4.0 поставляется с Xcode 4.4. Вы хотите Clang 4.1, который поставляется с Xcode 4.5. После установки Xcode вы можете перейти в окно «Настройки», выбрать панель «Загрузки» и вкладку «Компоненты», где есть запись «Инструменты командной строки». С правой стороны будет кнопка с надписью «Установить».

введите описание изображения здесь

14

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]