在Windows上编译Clang

时间:2013-02-15 20:19:19

标签: windows llvm clang

我按照http://clang.llvm.org/get_started.html

的说明操作

我编译了最新的llvm主干和clang与MSVC 2010.现在我可以用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二进制文件不感兴趣

5 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分:2)

Chandler Carruth mentioned at Going Native 2013现在alpha builds of clang for Windows与Visual Studio集成。很多东西都被打破了,例如,溪流(这么好的旧世界将无法运作)。但是,在Windows上使用clang工作需要付出很多努力,因此期望它能够非常快速地发挥作用。

答案 2 :(得分:0)

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

答案 3 :(得分:0)

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

答案 4 :(得分:0)

如果我使用Windows的mingw标题,我猜你的程序可以正常工作。