Getting Clang to work on windows

前端 未结 6 1408
鱼传尺愫
鱼传尺愫 2020-12-02 07:21

I have followed the following step by step guide and I\'ve managed, after a bit of fiddling, to get clang to compile using code:blocks and MinGW. Great, so now I could add t

相关标签:
6条回答
  • 2020-12-02 08:02

    Windows 10 / VS 2017 / Clang 4.0.0 missing stdlib.h in C code. This is how I solved it:

    • Open x86_x64 Cross Tools Command Prompt for VS 2015/2016/2017. Running clang in here should eliminate the "missing headers" error.
    • If still not working, you are missing the actual headers and/or libs, since Clang leaves these platform-specifics to VS or MinGW. Go to \Program Files (x86)\Windows Kits\10\Include\ and search its subdirectories (if any) for stdlib.h and co. If not found, you will need to install the latest Windows 10 SDK by going to Visual Studio (installer) and clicking Modify to add packages.
    0 讨论(0)
  • 2020-12-02 08:07

    Depending on your version of MinGW (and thus the version of gcc ported), the headers might be scattered a bit...

    In the file clang/lib/Frontend/InitHeaderSearch.cpp you will find a number of hard-coded paths. The trouble is that each is version specific, so if your version of MinGW is not in there, then feel free to add it (and ask for it to be integrated in Clang's mainline by posting the patch to cfe-commit).

    Personally I run it on MinGW/msys with only minor issues (a number of test cases fail because my msys shell mangles the input when there are : in...), I have not tried using it from CodeBlocks though (I'm used to the command line).

    If you wish to help, Takumi is watching over MinGW integration, Francois Pichet is leading the work on compatibility with VC++/MFC headers (ie is the main contributor) and @rubenvb is currently trying to push patches on libc++ to have it working on Windows (libc++ does not compile on Windows yet). The 3 areas are pretty much independent and require different skills and knowledge.

    0 讨论(0)
  • 2020-12-02 08:07

    Clang does have hardcoded search locations, as defined in the file clang/lib/Frontend/InitHeaderSearch.cpp, near the comment FIXME: temporary hack: hard-coded paths.

    There's a note about it on this page: http://clang.llvm.org/get_started.html

    So get the include paths from your other compiler (MingW), and hardcode them into Clang, and it might work. (I'm not sure if Clang's Windows support is 100% there yet)

    0 讨论(0)
  • 2020-12-02 08:14

    When I had the same issue, I just set-up Code Blocks to the correct include directories for my setup. And it uses -I with clang++ and everything's been working great so far.

    0 讨论(0)
  • 2020-12-02 08:22

    I had a similar problem. I used the GCC 4.7's analogs of the paths specified by Mike Dinsdale's answer and specified them with the '-isystem' flag (Clang 3.2 in the mingw64 distribution as built by rubenvb) to all of my future calls to the clang executable (via scripts). As these directories are being specified explicitly as system inclusion directories, all potentially wearisome warnings generated by them are automatically suppressed.

    tl;dr: the -isystem flag specifies system inclusion directories without recompilation in Clang

    0 讨论(0)
  • 2020-12-02 08:23

    There's some instructions for building clang on this page (hidden in the "Clang Development" part of the sidebar...). For MinGW you want the section called "On Unix-like Systems". The only tricky part is step 5 which tells you how to set up the paths for the C++ standard library. These need to be added into the code in clang/lib/Frontend/InitHeaderSearch.cpp. On my machine it wound up looking like this

    // 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);
    

    though I'm not sure all these are needed!

    0 讨论(0)
提交回复
热议问题