2016-10-05 3 views
6

I 3.9 von http://llvm.org/releases/3.9.0/LLVM-3.9.0-win32.exeWie Klirren mit mingw-w64-Header auf Windows verwenden

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

und 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. 

ich habe nicht MSVC klirren haben installiert auf meinem PC und kein Windows SDK. Ich brauche ein bestimmtes Feature von Clang und ich wollte es mit gcc und genauer mit g ++ ersetzen, weil ich C++ benutze.

Wenn ich versuche, einfache Datei zu kompilieren, erhalte ich:

fatal error: 'string' file not found

Ist es meine aktuelle Klirren Installation bedeutet nicht mingw auf Windows unterstützen? Grundsätzlich möchte ich nur headers und libs von meiner mingw-w64-Installation verwenden. Ich suchte nach einer Lösung und fand nichts. Ich weiß nicht, was ich tun soll.

Bedeutet es auch, dass meine Clang-Installation von MSVC abhängt, die ich nicht habe?

EDIT: Aus dem Kommentar auf dieser Seite: http://blog.johannesmp.com/2015/09/01/installing-clang-on-windows-pt2/

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.

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.

Ich denke, es ist alles erklärt. Bedeutet es, dass ich mingw build brauche, um es mit mingw arbeiten zu lassen?

Antwort

2

Die richtige Sache zu tun, ist dies ...

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

Oder wenn Sie 64-Bit-Ausgabe wollen ...

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

Clang wird die Position der Header und Bibliotheken bestimmen aus Ihrer Pfad. Stellen Sie sicher, dass Sie nur die Version von Mingw in Ihrem Pfad haben, auf die Sie zielen.

Standardmäßig ist die aktuelle Version von Clang (5.0.0 ab sofort) wird x86_64-pc-windows-msvc

Beispielhaft Ziel ...

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

Die Frage war, wie man es mit Mingw-W64-Header verwenden, nicht wie für unterschiedliche Architektur zu bauen. Für manche Leute ist es nicht klar. Zum Beispiel als ich anfing hatte ich keine msvc auf meinem Computer, aber ich habe versucht, mit "-msvc" am Ende zu bauen. Wie Sie sagen, zielt die neueste Version standardmäßig auf msvc und das war zu diesem Zeitpunkt mein Problem. Es gab keine einfache Möglichkeit, Gnu stattdessen mit der neuesten Version zu verwenden, also hatte ich 3 Möglichkeiten - Downgrade, MSYS2 zu verwenden oder es selbst zu erstellen. – lll

+2

Dies * ist * wie die MinGW-W64-Header zu verwenden. Wenn mingw installiert ist und in Ihrem Pfad ist, ist der Zielparameter, wie man calling die Header verwendet, stellen Sie sicher, dass Sie die richtige Bit-Version für den installierten mingw auswählen. – burito

+0

Ich habe gerade getestet, Clang 3.9.0 hat auch dieses Verhalten. – burito

4

Nach der Installation einer älteren Version mit MinGW, die 3.7.0 RC3 ist, funktionierte es.

Sie können den Unterschied in der Version i686-pc-windows- Gnu vs i686-pc-windows- bemerken msvc.

Ich denke clang 3.9 würde auch funktionieren, wenn sie nicht etwas in ihrem Quellcode brechen würden und wenn Sie es selbst bauen würden. Wäre schön, neuste 3.9 mit MinGW zu arbeiten. Ich bin jedoch zu faul, um es selbst zu bauen.

EDIT: Es gibt einige Pakete für mingw zu https://github.com/Alexpux/MINGW-packages die Sie installieren können MSYS2 verwenden, die Unterstützung zu bieten scheinen für Klirren. Es gibt einige Commits zu 3.8 und 3.9.

Ich hoffe, dies wird jemandem helfen, der ähnliche Probleme hat.