Slik installerer du LLVM og Clang på CentOS 6

LLVM er en åpen kildekode-kompilatorinfrastruktur. LLVM ble startet i 2000, og har vært mye brukt og modifisert av Apple siden 2005. Clang er en C, C++, Objective-C og Objective-C++ kompilator som fungerer med LLVM-systemet. Clang ble startet i 2007 av Apple, og siden den gang har Google og Intel blitt involvert i den fortsatte utviklingen.

Clangs utviklere hevder at sammenlignet med GCC, kompilerer den raskere, bruker mindre minne, gir mer brukervennlig diagnostikk under kompilering og er kompatibel med GCC.

CentOS følger utviklingen av Red Hat Enterprise Linux (RHEL). RHEL streber etter å være en stabil serverplattform, noe som betyr at den ikke haster med å inkludere de nyeste versjonene av alt.

Når denne artikkelen skrives, distribuerer CentOS 6 offisielt LLVM & Clang v3.4.2. Imidlertid har Clang v3.6 blitt utgitt.

Det offisielle forslaget er at hvis du trenger en nyere versjon av LLVM & Clang, bør du vurdere en annen UNIX-distribusjon som er mer fokusert på å støtte de nyeste versjonene av programvarepakker.

Heldigvis kan du installere en nyere versjon LLVM & Clang GCC på CentOS. Dette avviker fra ren bruk av den offisielt distribuerte programvaren, men noen ganger kan du føle at du har lite valg.

Denne artikkelen beskriver hvordan du installerer CentOS 6 offisielt støttet versjon av LLVM & Clang, og hvordan du installerer en nyere versjon. Denne artikkelen forutsetter at du har en nyinstallert CentOS 6 VPS, men du kan absolutt følge instruksjonene på en VPS du allerede har brukt.

Clang er stort sett uavhengig av GCC, men når denne artikkelen skrives, bruker Clang fortsatt flere delte biblioteker installert av GCC (nemlig crtbegin.o, gcc, og gcc_s). Hvis du installerer LLVM & Clang på CentOS 6, vil du ikke kunne kompilere noe hvis du ikke også har GCC på systemet ditt for disse delte bibliotekene. Ideelt sett ville yum ha en pakkeavhengighet for klang av gcc og gcc-c++, men når denne artikkelen skrives, er yum uvitende om avhengigheten.

I tillegg krever det å bygge en nyere versjon av LLVM & Clang fra kilden G++ v4.7+, som du bare kan få på CentOS 6 ved å installere den etter kilde.

Hvis du kjører alle trinnene nedenfor, vil du ende opp med 2 versjoner av GCC og 2 versjoner av LLVM & Clang. Dette inkluderer en offisielt støttet binær eldre versjon og en nyere versjon fra kilden for hvert program. Det er imidlertid ikke nødvendig å kjøre alle trinnene nedenfor. Du kan bestemme om du vil ha den offisielt støttede binære eldre versjonen av LLVM & Clang, eller den nyere versjonen fra kilden, og kjøre den delen av instruksjonene som passer din avgjørelse.

Installer en offisielt støttet (eldre) versjon av LLVM & Clang

  1. VIKTIG! Installer først en offisielt støttet (eldre) versjon av GCC, ved å utføre trinnene i artikkelen Hvordan installere GCC på CentOS 6 -- du trenger IKKE å utføre trinnene under den artikkelens overskrift "Installer en nyere versjon av GCC fra kilden ".

  2. Installer LLVM & Clang

    sudo yum install clang
        --- This will bring in llvm as a dependency
    
  3. Sjekk de installerte versjonene og se plasseringene deres.

    clang --version
        May say: clang version 3.4.2 (tags/RELEASE_34/dot2-final)
    which clang
        /usr/bin/clang
    gcc --version
        May say: gcc (GCC) 4.4.7 20120313 (Red Hat 4.4.7-11)
    g++ --version
        May say: g++ (GCC) 4.4.7 20120313 (Red Hat 4.4.7-11)
    which gcc
        /usr/bin/gcc
    which g++
        /usr/bin/g++
    

Installer en nyere versjon av LLVM & Clang fra kilden

For å bygge LLVM & Clang etter kilde på CentOS, må du ha GCC v4.7 eller nyere. CentOS 6 har ikke så høye versjoner i yum, så du må først installere en nyere GCC fra kilden.

  1. VIKTIG! Installer først en nyere versjon av GCC fra kilden, ved å utføre trinnene i artikkelen Hvordan installere GCC på CentOS 6 -- du MÅ utføre alle trinnene i den artikkelen, inkludert under overskriften "Installer en nyere versjon av GCC fra kilde".

  2. Installer ekstra nødvendige pakker.

    sudo yum install cmake
    
  3. Installer en nyere versjon av Python. LLVM & Clang v3.6.0 krever Python v2.7+, men CentOS 6 yum repository har bare Python v2.6.6.

    mkdir ~/sourceInstallations
    cd ~/sourceInstallations
    wget https://www.python.org/ftp/python/2.7.9/Python-2.7.9.tgz
    tar -xvf Python-2.7.9.tgz
    cd Python-2.7.9
    ./configure && make && sudo make install
    
  4. Bestem hvilken versjon av LLVM & Clang du vil ha. Denne kommandoen vil vise deg "taggene" for de tilgjengelige versjonene.

    svn ls http://llvm.org/svn/llvm-project/llvm/tags | grep RELEASE
        RELEASE_1/
        ...
        RELEASE_352/
        RELEASE_360/
        RELEASE_361/
    svn ls http://llvm.org/svn/llvm-project/llvm/tags/RELEASE_361
        rc1/
        --- At this time, there is no final, just a release candidate.  You could certainly use a release candidate, but this article will show how to use a final release.
    svn ls http://llvm.org/svn/llvm-project/llvm/tags/RELEASE_360
        final/
        rc1/
        rc2/
        rc3/
        rc4/
    
  5. Få kilden til versjonen av LLVM & Clang du vil ha. Dette vil gå i noen minutter. Resten av denne artikkelen er skrevet for RELEASE_360/og vil laste ned kildene til ~/sourceInstallations/llvm_RELEASE_360/-- Du må erstatte riktig tag for å passe fremtidige versjoner. Katalogene nedenfor for compiler-rt, libcxx, og libcxxabier ikke absolutt nødvendige, men inneholder noen av funksjonene som LLVM & Clang har som GCC ikke har, så de er inkludert i denne artikkelen. Det er andre LLVM "underprosjekter" du kan velge å bruke, for eksempel dragonegg, LLDB, OpenMB, vmkit, polly, libclc, klee, SAFECode og lld. Du kan lese om dem på LLVM-nettstedet .

    cd ~/sourceInstallations
    svn co http://llvm.org/svn/llvm-project/llvm/tags/RELEASE_360/final llvm_RELEASE_360
    cd llvm_RELEASE_360/tools
    svn co http://llvm.org/svn/llvm-project/cfe/tags/RELEASE_360/final clang
    cd ../projects
    svn co http://llvm.org/svn/llvm-project/compiler-rt/tags/RELEASE_360/final compiler-rt
    svn co http://llvm.org/svn/llvm-project/libcxx/tags/RELEASE_360/final libcxx
    svn co http://llvm.org/svn/llvm-project/libcxxabi/tags/RELEASE_360/final libcxxabi
    cd ..
    svn update
        At revision X.
        --- Hopefully this outputs one line saying "At revision X", but numbers instead of "X".  If it downloads more source files, a new revision was released while you were downloading the source code.  This is highly unlikely unless you're using trunk (the most up to date, maybe unstable code.)  But, if this happens, perform a svn update in the tools/clang, projects/compiler-rt, projects/libcxx, projects/libcxxabi, and again ~/sourceInstallations/llvm_RELEASE_360, until you are fully up to date.
    
  6. Bygg LLVM & Clang. Dette vil gå en stund. Hvis dette fullføres riktig, vil den siste linjen du ser "suksess". Det er normalt å se noen feilmeldinger som ruller forbi raskt. Det er alltid en god idé å bygge ting i en annen katalog enn en kildekatalog.

    mkdir ../llvm_RELEASE_360_build
    cd ../llvm_RELEASE_360_build
    cmake -G "Unix Makefiles" -DCMAKE_BUILD_TYPE=Release -DCMAKE_C_COMPILER=/usr/local/bin/gcc -DCMAKE_CXX_COMPILER=/usr/local/bin/g++ ../llvm_RELEASE_360 && make && sudo make install && echo success
        --- If your VPS has multiple cores, you can speed up the build by changing the middle part
        ---   of this line from "&& make &&" to "&& make -j <number of cores> &&".
        --- You can see the number of cores your VPS has by running "nproc"
        --- If you omit -DCMAKE_BUILD_TYPE=Release, the build defaults to debug.  This is great if you need to debug LLVM & Clang itself, but slows down compilation of your end programs considerably.
        --- If you omit the references to gcc and g++, it will default to using the older binary versions in /usr/bin/, and will not compile.
    
  7. Sjekk de installerte versjonene og se plasseringene deres.

    clang --version
        May say: clang version 3.6.0 (tags/RELEASE_360/final 237229)
    clang++ --version
        May say: clang version 3.6.0 (tags/RELEASE_360/final 237229)
    which clang
        /usr/local/bin/clang
    which clang++
        /usr/local/bin/clang++
    
  8. Legg til de nye bibliotekene til ld (GNU-linkeren).

    echo "/usr/local/lib" > usrLocalLib.conf
    sudo mv usrLocalLib.conf /etc/ld.so.conf.d/
    sudo ldconfig
        --- This may say a file or two "is not an ELF file - it has the wrong magic bytes at the start."
        --- You may ignore this message.  It is silent about the work it successfully completed.
    
  9. Lag eventuelt et "hallo verden"-program.

    mkdir ~/code
    cd ~/code
    Create a file main.cpp that says:
        #include <iostream>
        using namespace std;
        int main() {
            cout << "Hello world!" << endl;
            return 0;
        }
    --- One way to create this file is to run "vi main.cpp", hitting "i" to enter insert mode,
    ---   typing the above file, hitting ESC, and hitting "ZZ" to save.
    clang++ main.cpp -o main
    ./main
        Hello World!
    clang++ -stdlib=libc++ -lc++abi main.cpp -o main
        --- This uses Clang's libc++ and libc++abi, instead of the GNU stdlibc++ and stdlibc++abi
    ./main
        Hello world!
    
  10. Bruk LLVM & Clang når du vil.

    You could set LLVM & Clang to be your system's default C and C++ compiler by running:
        echo "export CC=/usr/local/bin/gcc" >> ~/.bashrc
        echo "export CXX=/usr/local/bin/g++" >> ~/.bashrc
        source ~/.bashrc
    Once and a while there is a difference between Clang and GCC, but it's becoming more and more rare.  To be more conservative, you could specify in your code's buildsystem to use LLVM & Clang, but otherwise leave your system's default to the source build of GCC.
    
  11. Eventuelt gjenvinne plass på harddisken. Din ~/sourceInstallationsmappe vil være å ta opp rundt 11 GB diskplass. Det er sannsynligvis lurt å beholde mappene, siden det er valgfrie konfigurasjonsalternativer du kanskje må bruke på et tidspunkt i fremtiden, og det vil være raskere å ha mye allerede gjort. Og, som nevnt ovenfor, er det flere "delprosjekter" du kan legge til LLVM & Clang. Byggeprosessen lager også logger som du senere kan sjekke og jobbe fra hvis noe går galt. Men etter å ha kjørt "sudo make install" tidligere, er ikke din installerte LLVM & Clang avhengig av noe i denne katalogen, og plassen kan være på en premie, så du kan gjøre dette trinnet og gjenvinne 11 GB.

    cd ~/
    rm -rf sourceInstallations
    --- Again, if you can spare the space, you may someday be happy to have left it there.
    

Du har nå din nyere LLVM & Clang i /usr/local/bin, dine nyere 64-bit LLVM & Clang libs i /usr/local/lib, og dine nyere LLVM & Clang inkluderer filer i /usr/local/include.

Legg igjen en kommentar

The Rise of Machines: Real World Applications of AI

The Rise of Machines: Real World Applications of AI

Kunstig intelligens er ikke i fremtiden, det er her akkurat i nåtiden I denne bloggen Les hvordan kunstig intelligens-applikasjoner har påvirket ulike sektorer.

DDOS-angrep: en kort oversikt

DDOS-angrep: en kort oversikt

Er du også et offer for DDOS-angrep og forvirret over forebyggingsmetodene? Les denne artikkelen for å løse spørsmålene dine.

Har du noen gang lurt på hvordan hackere tjener penger?

Har du noen gang lurt på hvordan hackere tjener penger?

Du har kanskje hørt at hackere tjener mye penger, men har du noen gang lurt på hvordan tjener de den slags penger? la oss diskutere.

Revolusjonerende oppfinnelser fra Google som vil gjøre livet ditt enkelt.

Revolusjonerende oppfinnelser fra Google som vil gjøre livet ditt enkelt.

Vil du se revolusjonerende oppfinnelser fra Google og hvordan disse oppfinnelsene forandret livet til alle mennesker i dag? Les deretter til bloggen for å se oppfinnelser fra Google.

Fredag ​​Essential: Hva skjedde med AI-drevne biler?

Fredag ​​Essential: Hva skjedde med AI-drevne biler?

Konseptet med selvkjørende biler som skal ut på veiene ved hjelp av kunstig intelligens er en drøm vi har hatt en stund nå. Men til tross for flere løfter, er de ingen steder å se. Les denne bloggen for å lære mer...

Teknologisk singularitet: en fjern fremtid for menneskelig sivilisasjon?

Teknologisk singularitet: en fjern fremtid for menneskelig sivilisasjon?

Ettersom vitenskapen utvikler seg raskt og tar over mye av innsatsen vår, øker også risikoen for å utsette oss for en uforklarlig singularitet. Les hva singularitet kan bety for oss.

Funksjonaliteter til Big Data Reference Architecture Layers

Funksjonaliteter til Big Data Reference Architecture Layers

Les bloggen for å kjenne ulike lag i Big Data Architecture og deres funksjoner på den enkleste måten.

Evolusjon av datalagring – infografikk

Evolusjon av datalagring – infografikk

Lagringsmetodene for dataene har vært i utvikling kan være siden fødselen av dataene. Denne bloggen dekker utviklingen av datalagring på grunnlag av en infografikk.

6 fantastiske fordeler ved å ha smarte hjemmeenheter i livene våre

6 fantastiske fordeler ved å ha smarte hjemmeenheter i livene våre

I denne digitaldrevne verden har smarthusenheter blitt en avgjørende del av livet. Her er noen fantastiske fordeler med smarthusenheter om hvordan de gjør livet vårt verdt å leve og enklere.

macOS Catalina 10.15.4 tilleggsoppdatering forårsaker flere problemer enn å løse

macOS Catalina 10.15.4 tilleggsoppdatering forårsaker flere problemer enn å løse

Nylig lanserte Apple macOS Catalina 10.15.4 en tilleggsoppdatering for å fikse problemer, men det ser ut til at oppdateringen forårsaker flere problemer som fører til muring av mac-maskiner. Les denne artikkelen for å lære mer