c ++ - Sådan kompilerer du Clang på Windows

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg har forsøgt at finde en måde at få Clang på at arbejde på Windows, men har problemer. Jeg får Clang til at kompilere med succes, men når jeg forsøger at kompilere et program, har jeg en masse fejl i standardoverskrifterne.


Jeg er opmærksom på Rubenvbs fremragende præbuderede versioner af Clang, men jeg vil kompilere det til mig selv. Jeg lyttede også til GoingNative samtaler om Clang, der sagde, at det ikke havde meget god Windows support endnu. Hvordan kan jeg få clang arbejde på Windows? [11]

Bedste reference


Jeg brugte følgende metode til at kompilere clang for C ++ på Windows 7, og det er blevet valideret af Mysticial og andre:



  1. Download og installer MinGW (sørg for at installere C ++-kompilatoren) og læg bin-mappen i din PATH (jeg har MinGW 4.6.1 og testes med succes på en anden computer med 4.6.2)

  2. Sørg for, at du har Python i din PATH ( ikke 3 , jeg har 2,7)

  3. (Valgfrit: Sørg for, at du har Perl i din PATH (jeg brugte ActivePerl 5.14.2 64-bit))

  4. Få CMake og læg den i din PATH

  5. Gå til LLVM downloads siden og download kildekoden LLVM 3.0 sammen med Clang kildekoden. Får ikke koden fra SVN, det virker ikke med MinGW-overskrifterne.

  6. Uddrag kildekoderne Jeg havde llvm-kilden i en mappe ved navn llvm-3.0.src på mit skrivebord

  7. Sæt clang-kilden direkte i en mappe kaldet 'clang' (det skal kaldes dette nøjagtigt, eller du vil bygge llvm, men clang vil ikke blive bygget) i mappen 'værktøjer' inde i llvm-kildemappen, det skal gøre dine mapper ser ud som:


    • llvm kilde


      • autoconf mappe

      • ...

      • værktøjsmappe


        • ...

        • clang-mappe


          • bindingsmappe

          • ...

          • Makefile-fil

          • ...


        • ...


      • ...



  8. Lav en mappe med navnet 'build' i samme mappe som llvm source mappen

  9. Åbn en kommandolinje og cd i bygningsmappen

  10. Kør kommandoen cmake -G "MinGW Makefiles" -DCMAKE\_BUILD\_TYPE=Release ..llvm-3.0.src [12] [13] [14] [15]



    • (det sidste argument er den relative vej til den mappe, der har llvm-kilden i den (og clang-kilden i underkatalogen for værktøjer/clang))

    • Dette vil svare til en 'configure' kommando, og makefiles og alt vil blive genereret i build folder

    • Det tager et par minutter


  11. Kør kommandoen mingw32-make



    • Dette vil kompilere llvm og clang, og clang executables vil blive genereret i build/bin mappen

    • Dette vil nok tage lang tid. (Du kan forsøge at fremskynde det ved at tilføje parallelle builds, -j<number> option) Det kan være godt at lukke alle andre programmer, så computeren kan koncentrere sig, og de interfererer ikke med den lange kompileringsproces, sådan som at lægge en lås på en mappe, som kompilatoren skriver til (det skete for mig). Jeg slukkede endda min antivirus- og firewallsoftware, så de ikke ville scanne de genererede filer og komme i vejen.




Tid til at teste det ud



  1. Opret en .cpp-fil i mappen build/bin (jeg vil bruge hello.cpp). Brug en standardbibliotekshoved til at sikre, at der indgår stier og biblioteker. Start med et meget simpelt program.


    (Hvad jeg startede med:


    #include <iostream>
    
    int main() {
        std::cout << "hi";
    }
    


    )

  2. Kør kommandoen clang hello.cpp -std=c++0x -I"C:MinGWlibgccmingw324.6.1includec++" -I"C:MinGWlibgccmingw324.6.1includec++mingw32" -Lc:/mingw/bin/../lib/gcc/mingw32/4.6.1 -Lc:/mingw/bin/../lib/gcc -Lc:/mingw/bin/../lib/gcc/mingw32/4.6.1/../../../../mingw32/lib -Lc:/mingw/bin/../lib/gcc/mingw32/4.6.1/../../.. -L/mingw/lib -lstdc++ -lmingw32 -lgcc\_s -lgcc -lmoldname -lmingwex -lmsvcrt -ladvapi32 -lshell32 -luser32 -lkernel32 -lmingw32 -lgcc\_s -lgcc -lmoldname -lmingwex -lmsvcrt


    (-L angiver en mappe, hvor du skal søge efter biblioteker og -l angiver et bibliotek at linke)
    (Hvis du ikke har MinGW installeret på samme sti som jeg gjorde, kan du finde ud af stierne med kommandoen 'g ++ somefile.cpp -v' for at få g ++ til at spildte dens guts om hvilke muligheder det bruger til bibliotekets stier og biblioteksfiler og alt andet
    Søg nær slutningen af ​​output for -L og -l mulighederne. Vær opmærksom på .o filnavne, der er interspersed med -L'erne. Clang bruger mange af de samme muligheder som g ++, så jeg bogstaveligt kopierede og indsatte den linje fra outputen fra g ++)


    Dette skal kompilere dit program og producere en fil med navnet a.out

  3. omdøbe a.out til a.exe eller hvad som helst

  4. Kør .exe

  5. Dit program skal køre.



Clang (3.0) har stadig nogle problemer på Windows (jeg ved ikke, om disse problemer også er på Linux). Hvis du f.eks. Compilerer en lambda (som clang ikke understøtter) med -std=c + + 0x, vil det medføre clang at kollidere og udsende en diagnostisk fejl.
(Jeg blev informeret om LLVM IRC, at dette skyldes, at clang implementerer parsing for lambdas, men ikke semantisk analyse, hvilket er den fase i hvilken det går i stykker (fordi de glemte at deaktivere parsing lambdas til 3.0-udgivelsen), og de ved allerede dette insekt)


Også den berømte Mysticial var venligt enig om at teste denne vejledning og lavede nogle observationer under hans testning:



  1. Windows-overskrifter ser ud til at virke.

  2. Fungerer i øjeblikket kun for 32-bit.

  3. 64-bit kompilerer fint, men vundet 'samler.'

  4. SSE er nok fint. ([[Mystical hasn 't]] testet en fungerende SSE på 32-bit selv.)


Andre referencer 1


Her er hvad fungerede i mit miljø, på Windows 8.1, som i alt ligner Seths instruktion, men med friskere værktøjer.



  1. Jeg installerede MinGW 64 til C:/MinGW for at være præcis, jeg har brugt STLs distro.

  2. Jeg installerede Python 3, tog bare deres seneste version.

  3. Jeg installerede CMake 3.0.2

  4. Jeg forked LLVM og Clang on Github og klonede dem til min maskine og placerede Clangs repo i llvm \ tools \ clang folder (strukturen er beskrevet på den officielle side, de viser kun eksempler med svn i stedet for git).

  5. Jeg oprettede 'build' -mappen ud for 'llvm' -mappen, og i mappen 'build' kørte denne kommando: cmake -G "MinGW Makefiles" -D"CMAKE\_MAKE\_PROGRAM:FILEPATH=C:/MinGW/bin/make.exe" -DCMAKE\_BUILD\_TYPE=Release ..llvm (af en eller anden grund kunne CMake ikke finde 'make' automatisk)

  6. Så løb jeg 'make' til faktisk at bygge. Bygningen tog et par timer.

  7. Efter det i en anden mappe har jeg lavet 1.cpp, som udfører et lambda-udtryk for at udskrive 'hej':




#include <iostream>

int main() {
    []{ std::cout << "hi"; }();
}




  1. Jeg har også oprettet en cmd-fil til kompilering af cpp. Alternativt kan du bare indstille PATH-variablen korrekt på andre måder. Bemærk, at GCC vesrion i din MinGW-pakke kan være anderledes. Også Clang har nogle indbyggede stier, den forsøger, men de er bundet til specifikke GCC-versioner, og minen var ikke blandt dem, så jeg var nødt til at give de inkluderede stier udtrykkeligt.




set PATH=<path to the build folder from step 5>/bin;c:/mingw/bin;\%PATH\% 
clang++ -std=c++11 1.cpp -o 1.exe -I"C:/MinGW/include"
-I"C:/MinGW/include/c++/4.9.1" -I"C:MinGWincludec++4.9.1x86\_64-w64-mingw32" -I"C:MinGWx86\_64-w64-mingw32include"




  1. Kører den cmd kompileret 1.cpp i 1.exe, der udskrives 'hej'.



Hvad fungerede ikke : [16] [17] [18] [19] [20]



  1. Jeg har forsøgt at bygge de samme llvm + clang kilder uden MinGW + GCC ved hjælp af MSVC compiler fra VS 2015 CTP. Det byggede Clang succes, den eneste forskel er, at du skal gøre det fra udvikler CMD vinduet, og du 'd skal køre cmake -G "Visual Studio 12" ..llvm og derefter kompilere løsningen i Visual Studio. Men, at Clang undlod at kompilere en cpp-prøve, den klagede over 'sort identifikation' char16\_t '' og '\_\_int128 understøttes ikke på dette mål' i MinGW-standardbibliotekets overskrifter. Hvis jeg bruger clang-cl og MS STL headers klager det over 'throw x (y)' specifiers. Måske skulle jeg give nogle ekstra nøgler til bygningen, men jeg kunne ikke få det til at fungere.




  C: \ Programmer (x86) \ Microsoft Visual Studio
  14.0 \ VC \ include \ xiosbase (293,4): fejl: kan ikke kompilere dette kaste udtryk endnu \_THROW\_NCEE (fejl, 'ios\_base :: eofbit set');
  C: \ Programmer (x86) \ Microsoft Visual Studio
  14.0 \ VC \ include \ xstddef (56,30): note: udvidet fra makro '\_THROW\_NCEE' #define \_THROW\_NCEE (x, y) kaste x (y)


Andre referencer 2


Se http://clang.llvm.org/get\_started.html#buildWindows[21]


Jeg har brugt 'Visual Studio 11 Win64' med cmake og det har arbejdet med den nuværende VS Express til Desktop.


Også for lib bruger jeg MinGW-W 64 og mangler filer SUA. Http://mingw-w64.sourceforge.net/og http://www.suacommunity.com/[22] [23]


For at forbinde .o compiled af clang ++ til brug sammen med W 64 -binarierne, bruger jeg -m i386pep med ld linker igen afsendt inden for W 64 leverbar.

Andre referencer 3


Jeg havde mange problemer med at bygge LLVM og clang ved hjælp af VS og være en Unix-bruger, jeg foretrækker at bygge kilder fra kommandolinjen.


Efter instruktionerne fra Seth Carnegie byggede jeg det fra SVN-depotet i modsætning til de medfølgende pakker ved brug af LLVM v3.3 med MinGW v4.5.2.