5

我在 windows 上构建了 clang 3.2,并试图构建一个简单的 hello world 程序。但是我遇到了很多错误,如下所示。

d:\Marius\xyz>clang++ -stdlib=libc++ -std=c++11 -Wall xyz.cpp -o xyz.exe
clang++: warning: argument unused during compilation: '-stdlib=libc++'
In file included from xyz.cpp:12:
In file included from ./stdafx.h:18:
In file included from C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\algorithm:6:
In file included from C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\xmemory:6:
In file included from C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\xmemory0:9:
In file included from C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\xutility:8:
In file included from C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\utility:8:
C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\type_traits:1072:
33: error:
  '_Ty' does not refer to a value
            _HAS_TRIVIAL_MOVE_CONSTRUCTOR(_Ty)
                                          ^

...

C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\xstddef:540:50: note:
      expanded from macro '_VARIADIC_EXPAND_4'
#define _VARIADIC_EXPAND_4(FUNC, X1, X2, X3, X4) \
                                                 ^
C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\xrefwrap:222:22:note:
      expanded from macro '_CLASS_RESULT_OF_PMF_OPT_0X'
                        __thiscall, X2, X3, X4)
                                          ^
fatal error: too many errors emitted, stopping now [-ferror-limit=]
20 errors generated.

我收到很多类似的错误,来自 VC++ 2012 标头。是否有可能在 Windows 上使用 clang++ 构建 C++11 代码?我必须提供额外的命令开关吗?

4

2 回答 2

3

Clang 在由 Visual Studio 构建时无法正常工作(据说它在由 MinGW 构建时可以正常工作,但我自己无法验证)。

构建 Clang 时,它被配置为使用用于构建它的库。由于您使用 Visual Studio 构建了 Clang,因此 Clang 将尝试使用 Visual Studio 头文件和库。不幸的是,Clang 和 Visual Studio 的内部结构不同,以至于 Clang无法使用 VS 特定的标头。

在可以为 Windows 编译libc++之前,Clang 将(几乎可以肯定)在由 Visual Studio 编译时永远不会工作。尝试使用 MinGW 构建它(并发表一篇博客文章或关于你如何做到的东西!),看看它是否适合你。

于 2012-10-29T21:33:56.710 回答
0

clang 默认包含用于构建它的工具链。但与 MS 的情况一样,使用的扩展可能是特定于供应商的。clang 自己的 libc++ 可用性有望大大缓解该问题。手动指定正确的包含目录。

在构建过程中还要分开编译和链接阶段。这将导致链接使用正确的二进制库而不是 VS 默认值。

于 2013-03-04T12:24:02.093 回答