12

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

我让 LLVM 和 Clang 3.2(SVN 修订版 163238)使用MinGW w64AddMinGWCPlusPlusIncludePaths("D:/Code/mingw/lib/gcc", "x86_64-w64-mingw32", "4.7.0"); (mingw-w64-bin_i686-mingw_20111220.zip)进行编译,并且还通过添加指向gcc 的 C++ 头目录clang/lib/Frontend/InitHeaderSearch.cpp,尽管我认为这可能不是最高级的迄今为止的方法。无论如何,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++\tr1Clang 不寻找它的地方。将这些 TR1 标头向上移动一个目录也无济于事。

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

4

4 回答 4

1

您配置错误/分配错误的 Clang。您还需要在添加版本的位置附近添加 MinGW-w64 路径。

使用我在此处提供解释的预构建版本: Windows 上的 Clang

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

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

另请注意,您使用的是旧版 MinGW-w64 GCC,您应该真正更新它。

于 2013-12-13T12:58:20.210 回答
0

尝试手动下载“wchar.h”并将其放在 Visual Studio 项目的本地工作目录中。对我来说效果很好。

于 2013-09-24T05:41:58.903 回答
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
于 2013-12-13T12:31:23.807 回答
0

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

于 2014-03-28T17:21:25.763 回答