代码之家  ›  专栏  ›  技术社区  ›  Prasoon Saurav

使用CLAN编译C++文件时出错

  •  1
  • Prasoon Saurav  · 技术社区  · 16 年前

    在linux环境下构建CLang之后,我尝试使用Visual Studio在Windows上构建它。一切都很顺利,但当我试图编译这本经典的时候 Hello World! 程序

    #include <iostream>
    
    int main()
    {
       std::cout<<"Hello World!";
    }
    

    C:\Users\SUPER USER\Desktop>clang++ a.cpp
    In file included from a.cpp:1:
    In file included from C:\Program Files\Microsoft Visual Studio 10.0\VC\include/i
    ostream:6:
    In file included from C:\Program Files\Microsoft Visual Studio 10.0\VC\include/i
    stream:6:
    In file included from C:\Program Files\Microsoft Visual Studio 10.0\VC\include/o
    stream:6:
    In file included from C:\Program Files\Microsoft Visual Studio 10.0\VC\include/i
    os:6:
    In file included from C:\Program Files\Microsoft Visual Studio 10.0\VC\include/x
    locnum:10:
    In file included from C:\Program Files\Microsoft Visual Studio 10.0\VC\include/s
    treambuf:6:
    In file included from C:\Program Files\Microsoft Visual Studio 10.0\VC\include/x
    iosbase:6:
    In file included from C:\Program Files\Microsoft Visual Studio 10.0\VC\include/x
    locale:8:
    In file included from C:\Program Files\Microsoft Visual Studio 10.0\VC\include/s
    tdexcept:6:
    In file included from C:\Program Files\Microsoft Visual Studio 10.0\VC\include/e
    xception:38:
    C:\Program Files\Microsoft Visual Studio 10.0\VC\include/eh.h(58) :  error:
          unknown type name 'type_info'
    _CRTIMP int __cdecl _is_exception_typeof(_In_ const type_info &_Type, ...
                                                        ^
    In file included from a.cpp:1:
    In file included from C:\Program Files\Microsoft Visual Studio 10.0\VC\include/i
    ostream:6:
    In file included from C:\Program Files\Microsoft Visual Studio 10.0\VC\include/i
    stream:6:
    In file included from C:\Program Files\Microsoft Visual Studio 10.0\VC\include/o
    stream:6:
    In file included from C:\Program Files\Microsoft Visual Studio 10.0\VC\include/i
    os:6:
    In file included from C:\Program Files\Microsoft Visual Studio 10.0\VC\include/x
    locnum:10:
    In file included from C:\Program Files\Microsoft Visual Studio 10.0\VC\include/s
    treambuf:6:
    In file included from C:\Program Files\Microsoft Visual Studio 10.0\VC\include/x
    iosbase:6:
    In file included from C:\Program Files\Microsoft Visual Studio 10.0\VC\include/x
    locale:8:
    In file included from C:\Program Files\Microsoft Visual Studio 10.0\VC\include/s
    tdexcept:7:
    In file included from C:\Program Files\Microsoft Visual Studio 10.0\VC\include/x
    string:6:
    In file included from C:\Program Files\Microsoft Visual Studio 10.0\VC\include/x
    memory:7:
    C:\Program Files\Microsoft Visual Studio 10.0\VC\include/new(51) :  error:
          exception specification in declaration does not match previous declaration
    
    _Ret_bytecap_(_Size) void *__CRTDECL operator new(size_t _Size) ...
                                         ^
    note: previous declaration is here
    C:\Program Files\Microsoft Visual Studio 10.0\VC\include/new(79) :  error:
          exception specification in declaration does not match previous declaration
    
    _Ret_bytecap_(_Size) void *__CRTDECL operator new[](size_t _Size)
                                         ^
    note: previous declaration is here
    In file included from a.cpp:1:
    In file included from C:\Program Files\Microsoft Visual Studio 10.0\VC\include/i
    ostream:6:
    In file included from C:\Program Files\Microsoft Visual Studio 10.0\VC\include/i
    stream:6:
    In file included from C:\Program Files\Microsoft Visual Studio 10.0\VC\include/o
    stream:6:
    In file included from C:\Program Files\Microsoft Visual Studio 10.0\VC\include/i
    os:6:
    In file included from C:\Program Files\Microsoft Visual Studio 10.0\VC\include/x
    locnum:10:
    In file included from C:\Program Files\Microsoft Visual Studio 10.0\VC\include/s
    treambuf:6:
    In file included from C:\Program Files\Microsoft Visual Studio 10.0\VC\include/x
    iosbase:6:
    In file included from C:\Program Files\Microsoft Visual Studio 10.0\VC\include/x
    locale:8:
    In file included from C:\Program Files\Microsoft Visual Studio 10.0\VC\include/s
    tdexcept:7:
    In file included from C:\Program Files\Microsoft Visual Studio 10.0\VC\include/x
    string:6:
    In file included from C:\Program Files\Microsoft Visual Studio 10.0\VC\include/x
    memory:8:
    In file included from C:\Program Files\Microsoft Visual Studio 10.0\VC\include/x
    utility:8:
    In file included from C:\Program Files\Microsoft Visual Studio 10.0\VC\include/u
    tility:9:
    In file included from C:\Program Files\Microsoft Visual Studio 10.0\VC\include/t
    ype_traits:7:
    C:\Program Files\Microsoft Visual Studio 10.0\VC\include/xtr1common(355) :  erro
    r:
          rvalue references are only allowed in C++0x
            struct _Remove_reference<_Ty&&>
                                        ^
    C:\Program Files\Microsoft Visual Studio 10.0\VC\include/xtr1common(368) :  erro
    r:
          rvalue references are only allowed in C++0x
            struct _Remove_rvalue_reference<_Ty&&>
                                               ^
    In file included from a.cpp:1:
    In file included from C:\Program Files\Microsoft Visual Studio 10.0\VC\include/i
    ostream:6:
    In file included from C:\Program Files\Microsoft Visual Studio 10.0\VC\include/i
    stream:6:
    In file included from C:\Program Files\Microsoft Visual Studio 10.0\VC\include/o
    stream:6:
    In file included from C:\Program Files\Microsoft Visual Studio 10.0\VC\include/i
    os:6:
    In file included from C:\Program Files\Microsoft Visual Studio 10.0\VC\include/x
    locnum:10:
    In file included from C:\Program Files\Microsoft Visual Studio 10.0\VC\include/s
    treambuf:6:
    In file included from C:\Program Files\Microsoft Visual Studio 10.0\VC\include/x
    iosbase:6:
    In file included from C:\Program Files\Microsoft Visual Studio 10.0\VC\include/x
    locale:8:
    In file included from C:\Program Files\Microsoft Visual Studio 10.0\VC\include/s
    tdexcept:7:
    In file included from C:\Program Files\Microsoft Visual Studio 10.0\VC\include/x
    string:6:
    In file included from C:\Program Files\Microsoft Visual Studio 10.0\VC\include/x
    memory:8:
    In file included from C:\Program Files\Microsoft Visual Studio 10.0\VC\include/x
    utility:8:
    In file included from C:\Program Files\Microsoft Visual Studio 10.0\VC\include/u
    tility:9:
    C:\Program Files\Microsoft Visual Studio 10.0\VC\include/type_traits(243) :  err
    or:
          rvalue references are only allowed in C++0x
            typedef _Ty && type;
                        ^
    C:\Program Files\Microsoft Visual Studio 10.0\VC\include/type_traits(427) :  err
    or:
          rvalue references are only allowed in C++0x
            struct is_rvalue_reference<_Ty&&>
                                          ^
    C:\Program Files\Microsoft Visual Studio 10.0\VC\include/type_traits(554) :  err
    or:
          '_From' does not refer to a value
            struct is_convertible _IS_CONVERTIBLE(_From, _To)
                                  ^
    C:\Program Files\Microsoft Visual Studio 10.0\VC\include/type_traits:554:40: not
    e: instantiated from:
            struct is_convertible _IS_CONVERTIBLE(_From, _To)
                                                  ^
    C:\Program Files\Microsoft Visual Studio 10.0\VC\include/type_traits(553) :  not
    e:
          declared here
    template<class _From, class _To>
                   ^
    C:\Program Files\Microsoft Visual Studio 10.0\VC\include/type_traits(555) :  err
    or:
          expected class name
            {       // determine whether _From is convertible to _To
            ^
    C:\Program Files\Microsoft Visual Studio 10.0\VC\include/type_traits(720) :  err
    or:
          expected expression
            struct has_nothrow_constructor _HAS_NOTHROW_CONSTRUCTOR(_Ty)
                                           ^
    C:\Program Files\Microsoft Visual Studio 10.0\VC\include/type_traits:42:36: note
    : instantiated from:
            : _Cat_base<is_pod<_Ty>::value || __has_nothrow_constructor(_Ty)>
                                              ^
    C:\Program Files\Microsoft Visual Studio 10.0\VC\include/type_traits(721) :  err
    or:
          expected class name
            {       // determine whether _Ty has a nothrow constructor
            ^
    C:\Program Files\Microsoft Visual Studio 10.0\VC\include/type_traits(726) :  err
    or:
          expected expression
            struct has_nothrow_copy _HAS_NOTHROW_COPY(_Ty)
                                    ^
    C:\Program Files\Microsoft Visual Studio 10.0\VC\include/type_traits:44:36: note
    : instantiated from:
            : _Cat_base<is_pod<_Ty>::value || __has_nothrow_copy(_Ty)>
                                              ^
    C:\Program Files\Microsoft Visual Studio 10.0\VC\include/type_traits(727) :  err
    or:
          expected class name
            {       // determine whether _Ty has a nothrow copy constructor
            ^
    C:\Program Files\Microsoft Visual Studio 10.0\VC\include/type_traits(733) :  err
    or:
          expected expression
            struct has_nothrow_default_constructor _HAS_NOTHROW_CONSTRUCTOR(_Ty)
                                                   ^
    C:\Program Files\Microsoft Visual Studio 10.0\VC\include/type_traits:42:36: note
    : instantiated from:
            : _Cat_base<is_pod<_Ty>::value || __has_nothrow_constructor(_Ty)>
                                              ^
    C:\Program Files\Microsoft Visual Studio 10.0\VC\include/type_traits(734) :  err
    or:
          expected class name
            {       // determine whether _Ty has a nothrow constructor
            ^
    C:\Program Files\Microsoft Visual Studio 10.0\VC\include/type_traits(739) :  err
    or:
          expected expression
            struct has_nothrow_copy_constructor _HAS_NOTHROW_COPY(_Ty)
                                                ^
    C:\Program Files\Microsoft Visual Studio 10.0\VC\include/type_traits:44:36: note
    : instantiated from:
            : _Cat_base<is_pod<_Ty>::value || __has_nothrow_copy(_Ty)>
                                              ^
    C:\Program Files\Microsoft Visual Studio 10.0\VC\include/type_traits(740) :  err
    or:
          expected class name
            {       // determine whether _Ty has a nothrow copy constructor
            ^
    C:\Program Files\Microsoft Visual Studio 10.0\VC\include/type_traits(746) :  err
    or:
          expected expression
            struct has_nothrow_assign _HAS_NOTHROW_ASSIGN(_Ty)
                                      ^
    C:\Program Files\Microsoft Visual Studio 10.0\VC\include/type_traits:46:36: note
    : instantiated from:
            : _Cat_base<is_pod<_Ty>::value || __has_nothrow_assign(_Ty)>
                                              ^
    C:\Program Files\Microsoft Visual Studio 10.0\VC\include/type_traits(747) :  err
    or:
          expected class name
            {       // determine whether _Ty has a nothrow assignment operator
            ^
    fatal error: too many errors emitted, stopping now [-ferror-limit=]
    20 errors generated.
    
    C:\Users\SUPER USER\Desktop>
    

    但当我把它编译成 Hello World

     #include <stdio.h>
    
     int main()
     {
         printf("Hello World!");
     }
    
     C:\Users\SUPER USER\Desktop>clang a.c
    
     C:\Users\SUPER USER\Desktop>a.out
     Hello World!
    

    这里的实际问题是什么?

    3 回复  |  直到 16 年前
        1
  •  1
  •   jpalecek    16 年前

    似乎clang不喜欢包含VC10头文件。我想用VC9试试。

        2
  •  0
  •   njamesp    14 年前

    根据 http://permalink.gmane.org/gmane.comp.compilers.clang.devel/12930 ,这是STL头本身的循环依赖性问题。。。

        3
  •  -4
  •   Rajakumar    16 年前
    #include "stdafx.h"
    #include <iostream>
    using namespace std;
    int main()
    {
       cout << "Hello World!\n" ;
       return 0;
    }
    

    试试这个,否则可能是编译器的问题。。。