4

我按照http://clang.llvm.org/get_started.html的说明进行操作

我用 MSVC 2010 编译了最新的 llvm 和 clang 主干。现在我可以用 Clang 编译简单的程序,但是当我试图编译这个程序时,我得到了很多错误。这是程序:

#include <algorithm>
int main(){ return 0; }

以下是一些错误:

In file included from hello.cpp:1:
In file included from C:\Program Files\Microsoft Visual Studio 10.0\VC\include\algorithm:6:
In file included from C:\Program Files\Microsoft Visual Studio 10.0\VC\include\memory:987:
In file included from C:\Program Files\Microsoft Visual Studio 10.0\VC\include\intrin.h:24:
In file included from H:/LLVM/build/bin/Debug/../lib/clang/3.3/include\immintrin.h:32:
In file included from H:/LLVM/build/bin/Debug/../lib/clang/3.3/include\xmmintrin.h:988:
H:/LLVM/build/bin/Debug/../lib/clang/3.3/include\emmintrin.h:1384:22: error: expected expression
  return (__m128)__in;
                     ^
H:/LLVM/build/bin/Debug/../lib/clang/3.3/include\emmintrin.h:1390:23: error: expected expression
  return (__m128i)__in;
                      ^
H:/LLVM/build/bin/Debug/../lib/clang/3.3/include\emmintrin.h:1396:23: error: expected expression
  return (__m128d)__in;
                      ^

Clang 的完整输出:http: //pastebin.com/qi87K8qr

Clang 尝试使用 MSVC 标头,但它不起作用。也许我应该改用 libc++ 或 libstdc++,但是该怎么做呢?

注意我对预编译的 clang 二进制文件不感兴趣

4

5 回答 5

4

是的,clang 根本不支持 Microsoft 的所有扩展 C++ 语法,因此无法解析使用该语法的 Microsoft C++ 标头。不仅如此,Clang 也不完全支持 Microsoft 的 C++ ABI、名称修改等。不过,我相信 Windows 上的 Clang 可以与 C 一起使用。

要使用不同的 C++ 标准库,您可以让 clang 忽略正常的头文件和库目录,IIRC-nostdinc++-nostdlib++. 然后你可以告诉 clang 你想要使用的包含和库目录(使用-isystem-I其他)。但是我不确定 libc++ 或 libstdc++ 是否在这些情况下工作,因为它们可能依赖于 Windows C 运行时库没有的东西。

于 2013-02-15T20:38:01.047 回答
2

Chandler Carruth在 Going Native 2013 上提到,现在有适用于 Windows 的 alpha 版本的 clang与 Visual Studio 集成。很多东西都坏了,例如,流(这么好的旧的 hello world 不会工作)。然而,为了让 clang 在 Windows 上工作,我们付出了很多努力,所以希望它很快就会变得相当好。

于 2013-09-20T05:28:40.880 回答
0

错误出现在与 clang 本身一起提供的标头中。看起来它无法正确处理 MMX/SSE 类型。尝试将 -msse -msse2 开关添加到命令行。

于 2013-02-20T23:19:52.893 回答
0

我正在使用 libstdc++ 并使用 VS2012Express 为桌面构建 clang。cmake 字符串是“Visual Studio 11 Win64”和基本目录。使用 -I 参数指定。

于 2013-03-04T13:18:10.397 回答
0

如果我在 Windows 上使用 mingw 头文件,我猜你的程序可以工作。

于 2013-08-22T10:51:23.330 回答