如何在 Windows 上使用带有 mingw-w64 标头的 clang [英] How to use clang with mingw-w64 headers on windows

查看:44
本文介绍了如何在 Windows 上使用带有 mingw-w64 标头的 clang的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有来自 http://llvm.org 的 clang 3.9/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: posix
InstalledDir: C:Program FilesLLVMin

和 gcc 6.2.0 (Mingw-w64)

And 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++.

I don't have MSVC installed on my PC and no Windows SDK. I need some particular feature of clang and I wanted to replace it with gcc and more specifically with g++ because I use C++.

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

When I try to compile simple file I get:

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

fatal error: 'string' file not found

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

Does it mean my current clang installation doesn't support mingw on windows? Basically all I want is to use headers and libs from my mingw-w64 installation. I was looking for solution and didn't find anything. I don't know what should I do.

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

Does it also mean my clang installation depends on MSVC that I don't have?

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

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

This doesn't work anymore with the latest binaries (3.7.1, 3.8, 3.9) from LLVM, because these were compiled with Visual Studio and for Visual Studio.

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

You can install the full Visual Studio 2015 (takes about 8GB) or install "Microsoft Visual C++ Build Tools 2015 Update 3" which contains only the command line tools from VS plus the standard C++ header files that Clang needs.

我认为它解释了一切.这是否意味着我需要 mingw build 才能让它与 mingw 一起工作?

I think it explains everything. Does it mean I need mingw build to get it working with mingw?

推荐答案

正确的做法,是这样...

The correct thing to do, is this...

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

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

Or if you want 64bit output...

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

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

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.

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

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

举个例子...

Microsoft Windows [Version 10.0.16299.19]
(c) 2017 Microsoft Corporation. All rights reserved.

C:Usersurito>copy con hello.c
#include <stdio.h>

int main(int argc, char *argv[])
{
    printf("Hello World!
");
    return 0;
}
^Z
        1 file(s) copied.

C:Usersurito>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 FilesLLVMin
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 FilesLLVMlibclang5.0.0include
End of search list.
hello.c:1:10: fatal error: 'stdio.h' file not found
#include <stdio.h>
         ^~~~~~~~~
1 error generated.

C:Usersurito>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 FilesLLVMin
 "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 Filesmingw-w64x86_64-7.2.0-posix-seh-rt_v5-rev0mingw64x86_64-w64-mingw32/sys-root/mingw/include"
#include "..." search starts here:
#include <...> search starts here:
 C:Program FilesLLVMlibclang5.0.0include
 C:Program Filesmingw-w64x86_64-7.2.0-posix-seh-rt_v5-rev0mingw64x86_64-w64-mingw32include
 C:Program Filesmingw-w64x86_64-7.2.0-posix-seh-rt_v5-rev0mingw64include
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:Usersurito>hello
Hello World!

C:Usersurito>

这篇关于如何在 Windows 上使用带有 mingw-w64 标头的 clang的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆