让Clang在Windows上工作

我遵循了下面的一步一步的指导 ,我已经pipe理了一些小窍门,让clang编译使用code:blocks和MinGW。 太棒了,所以现在我可以添加Clang模块到eclipse(为什么有一个IDE,当你可以有四个),并开始编译。

我可以编译一个不使用标准库的简单程序,但不幸的是,当我尝试编译这个程序时:

#include <iostream> using namespace std; int main() { cout << "!!!Hello World!!!" << endl; // prints !!!Hello World!!! return 0; } 

首先我得到这个:

.. \ src \ test.cpp:9:10:致命错误:找不到'iostream'文件

所以我将Mingw标题添加到包含path中; 那么我得到这个:

'致命的错误:'位/ c + + config.h'文件未find'

这很奇怪。 为什么明文工作,如果该文件不是“位/”? 它是内置于编译器? 没关系,我find了一个实现它,并创build'bits /'的文件。

然后,我得到了一个包括奇怪的错误,似乎表明要么铛没有正确实施预处理器,否则我对预处理器的理解不正确的错误风暴。

 C:\Program Files\CodeBlocks\MinGW\lib\gcc\mingw32\4.4.1\include\c++/cwchar:45:26: error: expected value in expression #if _GLIBCXX_HAVE_WCHAR_H 

还有更多这样的。 应该是的

 #if defined(_GLIBCXX_HAVE_WCHAR_H) 

要么

 #ifdef _GLIBCXX_HAVE_WCHAR_H? 

如果他们那么MinGW标准库是错误的。

我假设我不正确地认为clang可以放在gcc中,而且它不能用于gnu标准库。 任何确认或否认这一点,支持证据将是最受欢迎的!

那么,有没有人有一个万无一失的方式来获得在Windows PC上编译铿锵声? 网上关于叮当,特别是关于窗口的信息很less。

我非常热衷于让clang和LLVM工作,因为他们听起来很棒。 任何帮助,将不胜感激。

谢谢。

有一些关于在这个页面上build立clang的指令(隐藏在侧栏的“Clang Development”部分中…)。 对于MinGW,你需要一个名为“在类Unix系统上”的小节。 唯一棘手的部分是步骤5,告诉你如何设置C ++标准库的path。 这些需要被添加到clang/lib/Frontend/InitHeaderSearch.cpp的代码中。 在我的机器上,它看起来像这样

 // FIXME: temporary hack: hard-coded paths. AddPath("/usr/local/include", System, true, false, false); AddPath("c:/msysgit/mingw/bin/../lib/gcc/mingw32/4.4.0/include/c++", System, true, false, false); AddPath("c:/msysgit/mingw/bin/../lib/gcc/mingw32/4.4.0/include/c++/mingw32", System, true, false, false); AddPath("c:/msysgit/mingw/bin/../lib/gcc/mingw32/4.4.0/include/c++/backward", System, true, false, false); AddPath("c:/msysgit/mingw/bin/../lib/gcc/mingw32/4.4.0/../../../../include", System, true, false, false); AddPath("c:/msysgit/mingw/bin/../lib/gcc/mingw32/4.4.0/include", System, true, false, false); AddPath("c:/msysgit/mingw/bin/../lib/gcc/mingw32/4.4.0/include-fixed", System, true, false, false); 

虽然我不确定所有这些都是需要的!

根据您的MinGW版本(以及gcc移植的版本),头文件可能会分散一些。

在文件clang/lib/Frontend/InitHeaderSearch.cpp你会发现一些硬编码的path。 麻烦的是每个版本都是特定版本的,所以如果你的MinGW版本不在那里,那么随意添加它(并通过发布补丁到cfe-commit来要求它被集成到Clang的主线中)。

就我个人而言,我运行在MinGW / msys只有小问题(一些testing用例失败,因为我的msysshell在input时出现错误: in …),我没有试过从CodeBlocks使用它(虽然我用到命令行)。

如果你想帮忙,Takumi正在关注MinGW的整合,Francois Pichet正在领导VC ++ / MFC头文件的兼容性工作(即主要贡献者),而@rubenvb目前正试图在libc ++上推送补丁程序,让它在Windows上工作(libc ++不能在Windows上编译)。 这三个领域相当独立,需要不同的技能和知识。

我有一个类似的问题。 我使用了由Mike Dinsdale的答案指定的path的GCC 4.7的类比,并用“-isystem”标志(由rubenvb构build的mingw64发行版中的Clang 3.2)指定给我将来对clang可执行文件的所有调用(通过脚本)。 由于这些目录被显式指定为系统包含目录,因此它们生成的所有潜在的令人厌烦的警告都被自动抑制。

tl; dr: -isystem标志指定系统包含目录, 而不用在Clang中重新编译

Clang在注释FIXME: temporary hack: hard-coded paths附近有文件clang/lib/Frontend/InitHeaderSearch.cpp定义的硬编码search位置。

这个页面上有一个关于它的注释: http : //clang.llvm.org/get_started.html

所以得到你的其他编译器(MingW)的包含path,并将它们硬编码到Clang,它可能工作。 (我不确定Clang的Windows支持是否是100%)

我得到了与Fedora Linux相同的错误。 build议的解决方法是获得更高版本的Clang(我正在使用2.8),或者甚至从trunk中编译它。 还没有尝试过。

当我遇到同样的问题时,我只是将代码块设置为正确的包含目录。 它使用-I和铿锵声++,一切工作到目前为止。

Windows 10 / VS 2017 / Clang 4.0.0在C代码中缺lessstdlib.h 。 这是我解决它的方法:

  • 打开x86_x64 Cross Tools Command Prompt for VS 2015/2016/2017 。 在这里运行clang应该消除“缺less标题”错误。
  • 如果仍然不能正常工作,那么您会错过实际的头文件和/或库文件,因为Clang会将这些特定于平台的文件留给VS或MinGW。 转到\Program Files (x86)\Windows Kits\10\Include\并search其stdlib.h和co的子目录(如果有的话)。 如果找不到,则需要安装最新的Windows 10 SDK ,方法是转到Visual Studio(安装程序),然后单击修改以添加软件包。