Clang和C ++ 11标题

时间:2012-09-06 16:21:02

标签: c++ windows c++11 mingw clang

我正在努力让Clang在Windows上工作,最终使用Qt Creator进行开发,看看它是否是Visual Studio的可行替代方案。

我使用MinGW w64(mingw-w64-bin_i686-mingw_20111220.zip)编译了LLVM和Clang 3.2(SVN修订版163238),并通过向{AddMinGWCPlusPlusIncludePaths("D:/Code/mingw/lib/gcc", "x86_64-w64-mingw32", "4.7.0");添加clang/lib/Frontend/InitHeaderSearch.cpp来指向gcc的C ++头目录。 {1}},虽然我认为这可能不是最新的方法。无论如何,Clang似乎找到了大部分标题。

但是,在编译简单的Hello World时:

#include <iostream>
int main(int argc, char* argv[])
{
  std::cout << "test\n";
  return 0;
}

使用clang++ main.cpp我收到此错误:

In file included from main.cpp:1:
In file included from D:/Code/mingw/lib/gcc/x86_64-w64-ming32/4.7.0./include/c++\iostream:39:
In file included from D:/Code/mingw/lib/gcc/x86_64-w64-ming32/4.7.0./include/c++\ostream:39:
In file included from D:/Code/mingw/lib/gcc/x86_64-w64-ming32/4.7.0./include/c++\ios:39:
In file included from D:/Code/mingw/lib/gcc/x86_64-w64-ming32/4.7.0./include/c++\iosfwd:41:
In file included from D:/Code/mingw/lib/gcc/x86_64-w64-ming32/4.7.0./include/c++\postypes.h:41:
D:/Code/mingw/lib/gcc/x86_64-w64-ming32/4.7.0./include/c++\cwchar:45:10: fatal error:
      'wchar.h' file not found

因此,Clang显然发现了几个C ++标题,包括iostream但未能找到wchar.h。事实证明,wchar.h位于.../include/c++\tr1,Clang不会在其中找到它。将这些TR1标题移到一个目录中也无济于事。

我在这里做错了什么? gcc C ++库是否与Clang不兼容,因为它显然还没有将一些TR1库集成到标准中?我在哪里可以获得兼容的Clang C ++ 11库(适用于Windows!)?

4 个答案:

答案 0 :(得分:1)

你错误配置/错误修补了Clang。您还需要在添加版本的地方添加MinGW-w64路径。

使用我提供的预建版本以及解释: Clang on Windows

我修改了Clang以使用MinGW-w64头文件和GCC 4.6.3 libstdc ++头文件和库。目前,它已经停留在版本3.2,但是如果你对源代码应用了类似的补丁(遗憾的是我没有补丁文件),你也应该能够使用它。

我提供的只是提取,添加到PATH,并使用。仅限32位。

另请注意,您使用的是古老版本的MinGW-w64 GCC,您应该更新它。

答案 1 :(得分:0)

尝试手动下载“wchar.h”并将其放在visual studio项目的本地工作目录中。适合我。

答案 2 :(得分:0)

如果您将-nostdinc++传递给clang,则应该可以将其指向包含多个-I开关的包含的确切配置。也请尝试-nostdsysteminc -nobuiltininc

并且-v应该会在编译时显示标题的位置和顺序:

clang++ -v -nostdinc++ -ID:/Code/mingw/lib/gcc/x86_64-w64-ming32/4.7.0./include/c++ -ID:/Code/mingw/lib/gcc/x86_64-w64-ming32/4.7.0./include/c++/tr1 foo.cpp

答案 3 :(得分:0)

我遇到了同样的问题,使用Clang --version 3.4(198054)和mingw-get.exe --version 0.6.2-beta-20131004-1:原来我安装了MinGW:我最初只有选中&#39; mingw-gcc-g ++&#39;在mingw-get.exe包选择对话框中,添加&#39; mingw32-base&#39;后来解决了这个wchar_t.h问题:clang ++。exe -std = c ++ 11编译C ++ 11 iostream代码就好了。