微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用clang与libc和c 11从命令行与mac os x

如果我启用c 11和libc,我很难得到一个简单的hello世界来编译cl声.例如下面的代码
#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>' 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支持的选项,代码将编译正确.

谢谢你的任何答复

解决方法

您的命令行工具已过期. Clang 4.0附带Xcode 4.4.你想要Clang 4.1,随附Xcode 4.5.安装Xcode后,您可以转到“首选项”窗口,选择“下载”窗格和“组件”选项卡,还有一个“命令行工具”条目.右侧将显示“安装”按钮.

原文地址:https://www.jb51.cc/c/110534.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐