【问题标题】:How to use clang with mingw-w64 headers on windows如何在 Windows 上使用带有 mingw-w64 标头的 clang
【发布时间】:2017-02-13 18:17:33
【问题描述】:

我有来自http://llvm.org/releases/3.9.0/LLVM-3.9.0-win32.exe的clang 3.9

clang version 3.9.0 (branches/release_39)
Target: i686-pc-windows-msvc
Thread model: posix
InstalledDir: C:\Program Files\LLVM\bin

和 gcc 6.2.0 (Mingw-w64)

gcc (i686-posix-dwarf-rev1, Built by MinGW-W64 project) 6.2.0
Copyright (C) 2016 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

我的 PC 上没有安装 MSVC,也没有 Windows SDK。我需要 clang 的一些特殊功能,我想用 gcc 替换它,更具体地说,用 g++ 替换它,因为我使用 C++。

当我尝试编译简单文件时,我得到:

致命错误:找不到“字符串”文件

这是否意味着我当前的 clang 安装不支持 windows 上的 mingw?基本上我想要的只是使用我的 mingw-w64 安装中的头文件和库。我正在寻找解决方案,但没有找到任何东西。我不知道我该怎么办。

这是否也意味着我的 clang 安装依赖于我没有的 MSVC?

编辑: 来自本页评论:http://blog.johannesmp.com/2015/09/01/installing-clang-on-windows-pt2/

这不再适用于最新的二进制文件(3.7.1、3.8、3.9) 来自 LLVM,因为这些是用 Visual Studio 编译的 视觉工作室。

您可以安装完整的 Visual Studio 2015(大约需要 8GB)或 安装“Microsoft Visual C++ Build Tools 2015 Update 3” 仅包含来自 VS 的命令行工具以及标准 C++ Clang 需要的头文件。

我认为它解释了一切。这是否意味着我需要 mingw build 才能使其与 mingw 一起使用?

【问题讨论】:

    标签: windows gcc clang mingw llvm


    【解决方案1】:

    正确的做法是这样吗……

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

    或者如果你想要 64 位输出...

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

    Clang 将根据您的路径确定标头和库的位置。确保您的目标路径中只有 Mingw 版本。

    默认情况下,当前版本的 Clang(截至目前为 5.0.0)将针对 x86_64-pc-windows-msvc

    举个例子……

    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>
    

    【讨论】:

    • 问题是如何将它与 mingw-w64 头文件一起使用,而不是如何为不同的架构构建。有些人不清楚。例如,当我开始时,我的计算机上没有 msvc,但我尝试在最后使用 -msvc 构建。正如您所说,最新版本默认以 msvc 为目标,那是我当时的问题。没有简单的方法可以选择在他们的最新版本中使用 gnu,所以我有 3 种方法 - 降级、使用 MSYS2 或自己构建。
    • 如何使用 MinGW-w64 标头。如果 mingw 已安装且在您的路径中,则目标参数是使 clang 使用标头的方式,只需确保为已安装的 mingw 选择正确的位版本。
    • 我刚刚测试过,Clang 3.9.0也有这种行为。
    • 有趣,那么你的答案是正确的,而且很简单!
    • 使用 clang 6.0.0 和 MinGW-w64 最新版本 (gcc 7.30) 进行测试。上面的代码有效。
    【解决方案2】:

    安装使用 MinGW 构建的旧版本 3.7.0 RC3 后,它可以工作。

    您会注意到 i686-pc-windows-gnu 与 i686-pc-windows-msvc 版本的差异。

    我认为,如果 clang 3.9 没有破坏源代码中的某些内容并且您自己构建它,那么它们也可以工作。如果有最新的 3.9 也能与 MinGW 一起工作,那就太好了。不过我懒得尝试自己构建它。

    编辑: 也有一些适用于 mingw 的软件包https://github.com/Alexpux/MINGW-packages,您可以使用 MSYS2 安装这些软件包,它们似乎提供了对 clang 的支持。有一些与 3.8 和 3.9 相关的提交。

    希望这对有类似问题的人有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-07-27
      • 2019-08-24
      • 1970-01-01
      • 2015-09-30
      • 2018-01-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多