How to use clang with mingw-w64 headers on windows

后端 未结 2 1162
说谎
说谎 2020-12-01 08:24

I have clang 3.9 from http://llvm.org/releases/3.9.0/LLVM-3.9.0-win32.exe

clang version 3.9.0 (branches/release_39)
Target: i686-pc-windows-msvc
Thread model         


        
相关标签:
2条回答
  • 2020-12-01 08:38

    The correct thing to do, is this...

    clang -target i686-pc-windows-gnu test.c -otest.exe
    

    Or if you want 64bit output...

    clang -target x86_64-pc-windows-gnu test.c -otest.exe
    

    Clang will determine the location of the headers and libraries from your path. Make sure that you only have the version of Mingw in your path that you are targetting.

    By default, the current release of Clang (5.0.0 as of now) will target x86_64-pc-windows-msvc

    By way of example...

    Microsoft Windows [Version 10.0.16299.19]
    (c) 2017 Microsoft Corporation. All rights reserved.
    
    C:\Users\burito>copy con hello.c
    #include <stdio.h>
    
    int main(int argc, char *argv[])
    {
        printf("Hello World!\n");
        return 0;
    }
    ^Z
            1 file(s) copied.
    
    C:\Users\burito>clang hello.c -ohello.exe --verbose
    clang version 5.0.0 (tags/RELEASE_500/final)
    Target: x86_64-pc-windows-msvc
    Thread model: posix
    InstalledDir: C:\Program Files\LLVM\bin
    clang.exe: warning: unable to find a Visual Studio installation; try running Clang from a developer command prompt [-Wmsvc-not-found]
     "C:\\Program Files\\LLVM\\bin\\clang.exe" -cc1 -triple x86_64-pc-windows-    msvc18.0.0 -emit-obj -mrelax-all -mincremental-linker-compatible -disable-free -    disable-llvm-verifier -discard-value-names -main-file-name hello.c -mrelocation-    model pic -pic-level 2 -mthread-model posix -fmath-errno -masm-verbose -mconstructor-aliases -munwind-tables -target-cpu x86-64 -momit-leaf-frame-pointer -v -dwarf-column-info -debugger-tuning=gdb -resource-dir "C:\\Program Files\\LLVM\\lib\\clang\\5.0.0" -internal-isystem "C:\\Program Files\\LLVM\\lib\\clang\\5.0.0\\include" -internal-isystem C:/Program Files/Microsoft Visual Studio 10.0/VC/include -internal-isystem C:/Program Files/Microsoft Visual Studio 9.0/VC/include -internal-isystem C:/Program Files/Microsoft Visual Studio 9.0/VC/PlatformSDK/Include -internal-isystem C:/Program Files/Microsoft Visual Studio 8/VC/include -internal-isystem C:/Program Files/Microsoft Visual Studio 8/VC/PlatformSDK/Include -fdebug-compilation-dir "C:\\Users\\burito" -ferror-limit 19 -fmessage-length 120 -fms-extensions -fms-compatibility -fms-compatibility-version=18 -fno-threadsafe-statics -fdelayed-template-parsing -fobjc-runtime=gcc -fdiagnostics-show-option -fcolor-diagnostics -o "C:\\Users\\burito\\AppData\\Local\\Temp\\hello-5c526d.o" -x c hello.c
    clang -cc1 version 5.0.0 based upon LLVM 5.0.0 default target x86_64-pc-windows-msvc
    ignoring nonexistent directory "C:/Program Files/Microsoft Visual Studio 10.0/VC/include"
    ignoring nonexistent directory "C:/Program Files/Microsoft Visual Studio 9.0/VC/include"
    ignoring nonexistent directory "C:/Program Files/Microsoft Visual Studio 9.0/VC/PlatformSDK/Include"
    ignoring nonexistent directory "C:/Program Files/Microsoft Visual Studio 8/VC/include"
    ignoring nonexistent directory "C:/Program Files/Microsoft Visual Studio 8/VC/PlatformSDK/Include"
    #include "..." search starts here:
    #include <...> search starts here:
     C:\Program Files\LLVM\lib\clang\5.0.0\include
    End of search list.
    hello.c:1:10: fatal error: 'stdio.h' file not found
    #include <stdio.h>
             ^~~~~~~~~
    1 error generated.
    
    C:\Users\burito>clang hello.c -ohello.exe --verbose -target x86_64-pc-windows-gnu
    clang version 5.0.0 (tags/RELEASE_500/final)
    Target: x86_64-pc-windows-gnu
    Thread model: posix
    InstalledDir: C:\Program Files\LLVM\bin
     "C:\\Program Files\\LLVM\\bin\\clang.exe" -cc1 -triple x86_64-pc-windows-gnu -emit-obj -mrelax-all -disable-free -disable-llvm-verifier -discard-value-names -main-file-name hello.c -mrelocation-model pic -pic-level 2 -mthread-model posix -fmath-errno -masm-verbose -mconstructor-aliases -munwind-tables -target-cpu x86-64 -momit-leaf-frame-pointer -v -dwarf-column-info -debugger-tuning=gdb -resource-dir "C:\\Program Files\\LLVM\\lib\\clang\\5.0.0" -internal-isystem "C:\\Program Files\\LLVM\\lib\\clang\\5.0.0\\include" -internal-isystem "C:\\Program Files\\mingw-w64\\x86_64-7.2.0-posix-seh-rt_v5-rev0\\mingw64\\x86_64-w64-mingw32/sys-root/mingw/include" -internal-isystem "C:\\Program Files\\mingw-w64\\x86_64-7.2.0-posix-seh-rt_v5-rev0\\mingw64\\x86_64-w64-mingw32\\include" -internal-isystem "C:\\Program Files\\mingw-w64\\x86_64-7.2.0-posix-seh-rt_v5-rev0\\mingw64\\include" -fdebug-compilation-dir "C:\\Users\\burito" -ferror-limit 19 -fmessage-length 120 -fno-use-cxa-atexit -fobjc-runtime=gcc -fdiagnostics-show-option -fcolor-diagnostics -o "C:\\Users\\burito\\AppData\\Local\\Temp\\hello-d88ba4.o" -x c hello.c
    clang -cc1 version 5.0.0 based upon LLVM 5.0.0 default target x86_64-pc-windows-msvc
    ignoring nonexistent directory "C:\Program Files\mingw-w64\x86_64-7.2.0-posix-seh-rt_v5-rev0\mingw64\x86_64-w64-mingw32/sys-root/mingw/include"
    #include "..." search starts here:
    #include <...> search starts here:
     C:\Program Files\LLVM\lib\clang\5.0.0\include
     C:\Program Files\mingw-w64\x86_64-7.2.0-posix-seh-rt_v5-rev0\mingw64\x86_64-w64-mingw32\include
     C:\Program Files\mingw-w64\x86_64-7.2.0-posix-seh-rt_v5-rev0\mingw64\include
    End of search list.
     "C:\\Program Files\\mingw-w64\\x86_64-7.2.0-posix-seh-rt_v5-rev0\\mingw64\\bin\\ld.exe" -m i386pep -Bdynamic -o hello.exe "C:\\Program Files\\mingw-w64\\x86_64-7.2.0-posix-seh-rt_v5-rev0\\mingw64\\x86_64-w64-mingw32\\lib\\crt2.o" "C:\\Program Files\\mingw-w64\\x86_64-7.2.0-posix-seh-rt_v5-rev0\\mingw64\\lib\\gcc\\x86_64-w64-mingw32\\7.2.0\\crtbegin.o" "-LC:\\Program Files\\mingw-w64\\x86_64-7.2.0-posix-seh-rt_v5-rev0\\mingw64\\lib\\gcc\\x86_64-w64-mingw32\\7.2.0" "-LC:\\Program Files\\mingw-w64\\x86_64-7.2.0-posix-seh-rt_v5-rev0\\mingw64\\x86_64-w64-mingw32\\lib" "-LC:\\Program Files\\mingw-w64\\x86_64-7.2.0-posix-seh-rt_v5-rev0\\mingw64\\lib" "-LC:\\Program Files\\mingw-w64\\x86_64-7.2.0-posix-seh-rt_v5-rev0\\mingw64\\x86_64-w64-mingw32/sys-root/mingw/lib" "C:\\Users\\burito\\AppData\\Local\\Temp\\hello-d88ba4.o" -lmingw32 -lgcc -lgcc_eh -lmoldname -lmingwex -lmsvcrt -ladvapi32 -lshell32 -luser32 -lkernel32 -lmingw32 -lgcc -lgcc_eh -lmoldname -lmingwex -lmsvcrt "C:\\Program Files\\mingw-w64\\x86_64-7.2.0-posix-seh-rt_v5-rev0\\mingw64\\lib\\gcc\\x86_64-w64-mingw32\\7.2.0\\crtend.o"
    
    C:\Users\burito>hello
    Hello World!
    
    C:\Users\burito>
    
    0 讨论(0)
  • 2020-12-01 08:52

    After installing older version built with MinGW that is 3.7.0 RC3 it worked.

    You can notice the difference in version i686-pc-windows-gnu vs i686-pc-windows-msvc.

    I think clang 3.9 would work too if they didn't break something in their source code and if you'd build it yourself. Would be nice to have newest 3.9 working with MinGW too. I'm too lazy though to try to build it myself.

    EDIT: There are some packages for mingw too https://github.com/Alexpux/MINGW-packages that you can install using MSYS2 that seem to provide support for clang. There are some commits related to 3.8 and 3.9.

    Hope this will help someone that has similar problems.

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