0

我正在尝试在 Windows 上使用带有 clang 的 stl 标头编译一个相当简单的“hello world”程序,但我无法做到这一点。

我已经使用 VC11 Beta 从存储库编译了 Clang 3.1,没有问题。现在我正在尝试使用已经编译的 Clang 来使用 VC11 标头编译一个“hello world”示例,但是我得到了一堆错误,这似乎表明 Clang 正在迷失在 VC11 上模拟可变参数模板的一些宏魔法中,虽然我没有直接使用这个宏魔法。

我的包含目录:

  • C:\Program 文件 (x86)\Microsoft Visual Studio 11.0\VC\include
  • C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\atlmfc\include
  • C:\Program Files (x86)\Windows Kits\8.0\Include\um
  • C:\Program Files (x86)\Windows Kits\8.0\Include\shared
  • C:\Program Files (x86)\Windows Kits\8.0\Include\winrt

我收到如下错误:

C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\xstddef:1094:24: 错误:'_Nil' 没有引用值

还有一堆其他与宏有关的东西。

有人能够克服这个宏观问题吗?扩展此宏时,clang 预处理器是否存在问题?

4

2 回答 2

1

Microsoft 的 C++ 标头涉及尚不支持的扩展和特性。Clang 可以在 Windows 上使用 C 头文件构建程序,但还不能使用 C++ 头文件。

由于 C 运行时有效,您可能能够使用仅依赖于 C 运行时的不同 C++ 标准库。我还没有尝试过,但也许 libc++ 可以这样使用。

于 2012-04-12T18:23:25.460 回答
0

我非常确定您将无法使用 clang 来编译某些头文件,例如 C:\Program Files (x86)\Windows Kits\8.0\Include\winrt。原因是因为 Windows 8 带来了带有一些扩展的 C++ 版本。这个版本被称为C++/CX

一些扩展(如ref class)不是标准的 C++。我相信这会导致构建消息说您正在尝试编译一些可变参数模板。

于 2012-04-12T18:01:56.307 回答