I'm trying to get Clang to work on Windows, to eventually develop with Qt Creator to see if it's a viable alternative to Visual Studio.
I got LLVM and Clang 3.2 (SVN Revision 163238) to compile using MinGW w64 (mingw-w64-bin_i686-mingw_20111220.zip) and also pointed to gcc's C++ header directories by adding AddMinGWCPlusPlusIncludePaths("D:/Code/mingw/lib/gcc", "x86_64-w64-mingw32", "4.7.0");
to clang/lib/Frontend/InitHeaderSearch.cpp
, although I think that might not be the most up-to-date method. Anyway, Clang seems to find most of those headers.
However, when compiling a simple Hello World:
#include <iostream>
int main(int argc, char* argv[])
{
std::cout << "test\n";
return 0;
}
using clang++ main.cpp
I get this error:
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
So, Clang apparently finds several C++ headers including iostream
but fails to find wchar.h
. Turns out that wchar.h
is located in .../include/c++\tr1
where Clang doesn't look for it. Moving those TR1 headers up one directory doesn't help either.
What did I do wrong here? Is the gcc C++ library not compatible with Clang, since apparently it still hasn't integrated some TR1 libraries into the standard? Where could I get a compatible C++11 library for Clang (for Windows!)?
You can use Clang in C++11 mode with the -std=c++11 option. Clang's C++11 mode can be used with libc++ or with gcc's libstdc++.
Some header files ( stddef. h , stdarg. h , and others) are shipped with Clang — these are called builtin includes. Clang searches for them in a directory relative to the location of the clang binary.
Clang is designed to provide a frontend compiler that can replace GCC. Apple Inc. (including NeXT later) has been using GCC as the official compiler. GCC has always performed well as a standard compiler in the open source community.
Clang can be configured to use one of several different linkers: GNU ld. GNU gold. LLVM's lld.
You've misconfigured/mispatched Clang. You need to also add MinGW-w64 paths, somewhere around where you added your version.
Use the prebuilt version I provide with explanation here: Clang on Windows
I modified Clang to work with the MinGW-w64 headers and GCC 4.6.3 libstdc++ headers and libraries. Currently, it's stuck at version 3.2, but if you apply a similar patch to the sources (of which I unfortunately do not have a patch file) you should be able to use it as well.
The one I provide is just extract, add to PATH, and use. And 32-bit only.
Also note you are using an ancient version of MinGW-w64 GCC, and you should really update that.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With