Visual Studio 和 stlib 如何使用 clang?

How to use clang with Visual Studio and stlib?

我已经为 windows 3.6.2 和 Visual Studio 2015 安装了预构建的 llvm + clang。现在在 VS 2015 中,您可以创建项目并将编译器设置为 clang。 clang 的安装似乎已将编译器注册到设置中。其他一切正常,除了我不能使用和标准库。

clang 的编译器设置是属性->通用->平台工具下的 LLVM-vs2014

例如编译这段代码时

#include <iostream>

int main(int argc, char ** argv) {
    return 0; }

如果我删除#include 行,一切正常。

有什么想法吗?

The output message from VS is:
1>------ Build started: Project: TT, Configuration: Debug Win32 ------

1>clang-cl.exe : warning : argument unused during compilation: '/ZI'

1>clang-cl.exe : warning : argument unused during compilation: '/Gm'

1>clang-cl.exe : warning : argument unused during compilation: '/GS'

1>clang-cl.exe : warning : argument unused during compilation: '/fp:precise'

1>clang-cl.exe : warning : argument unused during compilation: '/FdDebug\vc140.pdb'

1>  In file included from main.cpp:1:

1>  In file included from C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\iostream:6:

1>  In file included from C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\istream:6:

1>  In file included from C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\ostream:6:

1>  In file included from C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\ios:6:

1

>  In file included from C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\xlocnum:7:

    1>  In file included from C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\cmath:656:

    1>  In file included from C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\xtgmath.h:8:

    1>C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\xtr1common(231,22): error : use of undeclared identifier 'char16_t'

    1>          struct _Is_integral<char16_t>

    1>                              ^
    1>C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\xtr1common(237,22): error : use of undeclared identifier 'char32_t'

    1>          struct _Is_integral<char32_t>

    1>                              ^
    1>  In file included from main.cpp:1:

    1>  In file included from C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\iostream:6:

    1>  In file included from C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\istream:6:

    1>  In file included from C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\ostream:6:

    1>  In file included from C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\ios:6:

    1>  In file included from C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\xlocnum:10:

    1>  In file included from C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\streambuf:6:

    1>  In file included from C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\xiosbase:6:

    1>  In file included from C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\xlocale:8:

    1>  In file included from C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\stdexcept:6:

    1>  In file included from C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\exception:7:

    1>  In file included from C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\type_traits:6:

    1>C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\xstddef(408,14): error : use of undeclared identifier 'char16_t'

    1>          struct hash<char16_t>

    1>                      ^

    1>C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\xstddef(414,14): error : use of undeclared identifier 'char32_t'

    1>          struct hash<char32_t>

    1>                      ^
    1>  In file included from main.cpp:1:

    1>  In file included from C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\iostream:6:

    1>  In file included from C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\istream:6:

    1>  In file included from C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\ostream:6:

    1>  In file included from C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\ios:6:

    1>  In file included from C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\xlocnum:10:
1>  In file included from C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\streambuf:6:

        1>  In file included from C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\xiosbase:6:

        1>  In file included from C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\xlocale:8:

    1>  In file included from C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\stdexcept:7:
    1>  In file included from C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\xstring:6:
    1>  In file included from C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\xmemory0:8:
    1>C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\limits(615,33): error : use of undeclared identifier 'char16_t'
    1>  template<> class numeric_limits<char16_t>

1>                                  ^
1>C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\limits(905,33): error : use of undeclared identifier 'char32_t'
1>  template<> class numeric_limits<char32_t>
1>                                  ^
1>  In file included from main.cpp:1:
1>  In file included from C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\iostream:6:
1>  In file included from C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\istream:6:
1>  In file included from C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\ostream:6:
1>  In file included from C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\ios:6:
1>  In file included from C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\xlocnum:10:
1>  In file included from C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\streambuf:6:
1>  In file included from C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\xiosbase:6:
1>  In file included from C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\xlocale:8:
1>  In file included from C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\stdexcept:7:
1>  In file included from C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\xstring:6:
1>  In file included from C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\xmemory0:10:
1>  In file included from C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\xutility:8:
1>  In file included from C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\utility:7:
1>C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\iosfwd(267,21): error : use of undeclared identifier 'char16_t'
1>          struct char_traits<char16_t>
1>                             ^
1>C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\iosfwd(276,21): error : use of undeclared identifier 'char32_t'
1>          struct char_traits<char32_t>
1>                             ^
1>  In file included from main.cpp:1:
1>  In file included from C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\iostream:6:
1>  In file included from C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\istream:6:
1>  In file included from C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\ostream:6:
1>  In file included from C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\ios:6:
1>  In file included from C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\xlocnum:10:
1>  In file included from C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\streambuf:6:
1>  In file included from C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\xiosbase:6:
1>  In file included from C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\xlocale:8:
1>  In file included from C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\stdexcept:7:
1>C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\xstring(2623,22): error : use of undeclared identifier 'char16_t'
1>  typedef basic_string<char16_t, char_traits<char16_t>, allocator<char16_t> >
1>                       ^
1>C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\xstring(2623,53): error : expected unqualified-id
1>  typedef basic_string<char16_t, char_traits<char16_t>, allocator<char16_t> >
1>                                                      ^
1>C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\xstring(2625,22): error : use of undeclared identifier 'char32_t'
1>  typedef basic_string<char32_t, char_traits<char32_t>, allocator<char32_t> >
1>                       ^
1>C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\xstring(2625,53): error : expected unqualified-id
1>  typedef basic_string<char32_t, char_traits<char32_t>, allocator<char32_t> >
1>                                                      ^
1>  In file included from main.cpp:1:
1>  In file included from C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\iostream:6:
1>  In file included from C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\istream:6:
1>  In file included from C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\ostream:6:
1>  In file included from C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\ios:6:
1>  In file included from C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\xlocnum:10:
1>  In file included from C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\streambuf:6:
1>  In file included from C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\xiosbase:6:
1>C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\xlocale(1004,30): error : use of undeclared identifier 'char16_t'
1>          class _CRTIMP2_PURE codecvt<char16_t, char, _Mbstatet>
1>                                      ^
1>C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\xlocale(1328,30): error : use of undeclared identifier 'char32_t'
1>          class _CRTIMP2_PURE codecvt<char32_t, char, _Mbstatet>
1>                                      ^
1>  14 errors generated.
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

Clang 3.6 不支持 Microsoft 模式下的 C++11 关键字 char16_tchar32_t (see the source). However good news, 3.7 does and will be released in three weeks (August 21) according to the LLVM website. In the meanwhile you could install a 3.7 release candidate or a snapshot build.