Hur man installerar LLVM och Clang på CentOS 6

LLVM är en kompilatorinfrastruktur med öppen källkod. LLVM startades 2000 och har använts och modifierats flitigt av Apple sedan 2005. Clang är en C, C++, Objective-C och Objective-C++ kompilator som fungerar med LLVM-systemet. Clang startades 2007 av Apple och sedan dess har Google och Intel engagerat sig i dess fortsatta utveckling.

Clangs utvecklare hävdar att den jämfört med GCC kompilerar snabbare, använder mindre minne, ger mer användarvänlig diagnostik under kompilering och är kompatibel med GCC.

CentOS följer utvecklingen av Red Hat Enterprise Linux (RHEL). RHEL strävar efter att vara en stabil serverplattform, vilket innebär att den inte har bråttom att inkludera de senaste versionerna av allt.

När denna artikel skrevs distribuerar CentOS 6 officiellt LLVM & Clang v3.4.2. Clang v3.6 har dock släppts.

Det officiella förslaget är att om du behöver en nyare version av LLVM & Clang, bör du överväga en annan UNIX-distribution som är mer fokuserad på att stödja de senaste versionerna av mjukvarupaket.

Lyckligtvis kan du installera en nyare version LLVM & Clang GCC på CentOS. Detta avviker från att enbart använda den officiellt distribuerade programvaran, men ibland kan du känna att du har lite val.

Den här artikeln beskriver hur du installerar CentOS 6-versionen av LLVM & Clang som officiellt stöds, och hur du installerar en nyare version. Den här artikeln förutsätter att du har en nyinstallerad CentOS 6 VPS, men du kan säkert följa instruktionerna på en VPS som du redan har använt.

Clang är i stort sett oberoende av GCC, men när den här artikeln skrivs använder Clang fortfarande flera delade bibliotek installerade av GCC (nämligen crtbegin.o, gcc, och gcc_s). Om du installerar LLVM & Clang på CentOS 6 kommer du inte att kunna kompilera någonting om du inte också har GCC på ditt system för dessa delade bibliotek. Helst skulle yum ha ett paketberoende för clang av gcc och gcc-c++, men när den här artikeln skrevs är yum omedveten om beroendet.

Att bygga en nyare version av LLVM & Clang från källan kräver dessutom G++ v4.7+, som du bara kan få på CentOS 6 genom att installera den efter källa.

Om du kör alla stegen nedan kommer du att sluta med 2 versioner av GCC och 2 versioner av LLVM & Clang. Detta inkluderar en officiellt stödd binär äldre version och en nyare version från källan för varje program. Det finns dock ingen anledning att köra alla stegen nedan. Du kan bestämma om du vill ha den officiellt stödda binära äldre versionen av LLVM & Clang, eller den nyare versionen från källan, och köra vilken del av instruktionerna som passar ditt beslut.

Installera en officiellt stödd (äldre) version av LLVM & Clang

  1. VIKTIG! Installera först en officiellt stödd (äldre) version av GCC, genom att utföra stegen i artikeln Hur man installerar GCC på CentOS 6 -- du behöver INTE utföra stegen under den artikelns rubrik "Installera en nyare version av GCC från källan ".

  2. Installera LLVM & Clang

    sudo yum install clang
        --- This will bring in llvm as a dependency
    
  3. Kontrollera de installerade versionerna och se var de finns.

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

Installera en nyare version av LLVM & Clang från källan

För att bygga LLVM & Clang efter källa på CentOS måste du ha GCC v4.7 eller högre. CentOS 6 har inte den här höga versionen i yum, så du måste först installera en nyare GCC från källan.

  1. VIKTIG! Installera först en nyare version av GCC från källan, genom att utföra stegen i artikeln Hur man installerar GCC på CentOS 6 -- du måste utföra alla steg i den artikeln, inklusive under rubriken "Installera en nyare version av GCC från källa".

  2. Installera ytterligare nödvändiga paket.

    sudo yum install cmake
    
  3. Installera en nyare version av Python. LLVM & Clang v3.6.0 kräver Python v2.7+, men CentOS 6 yum repository har bara 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. Bestäm vilken version av LLVM & Clang du vill ha. Detta kommando visar dig "taggarna" för de tillgängliga versionerna.

    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. Skaffa källan till versionen av LLVM & Clang som du vill ha. Detta kommer att pågå i några minuter. Resten av den här artikeln är skriven för RELEASE_360/och kommer att ladda ner källorna till ~/sourceInstallations/llvm_RELEASE_360/-- Du måste byta ut rätt tagg för att passa framtida versioner. Katalogen nedan för compiler-rt, libcxx, och libcxxabiär inte absolut nödvändiga, men innehåller några av de funktioner som LLVM & Clang har som GCC inte har, så de ingår i den här artikeln. Det finns andra LLVM "underprojekt" du kan välja att använda, såsom dragonegg, LLDB, OpenMB, vmkit, polly, libclc, klee, SAFECode och lld. Du kan läsa om dem på LLVM:s webbplats .

    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. Detta kommer att pågå ett tag. Om detta slutförs korrekt kommer den sista raden du ser att säga "framgång". Det är normalt att se några felmeddelanden som snabbt rullar förbi. Det är alltid en bra idé att bygga saker i en annan katalog än en källkatalog.

    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. Kontrollera de installerade versionerna och se var de finns.

    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. Lägg till de nya biblioteken till ld (GNU-länken).

    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. Gör eventuellt ett "hej världen"-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. Använd LLVM & Clang när du vill.

    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. Eventuellt återta hårddiskutrymme. Din ~/sourceInstallationsmapp kommer att ta upp cirka 11 GB diskutrymme. Det är förmodligen klokt att behålla mapparna, eftersom det finns valfria konfigurationsalternativ du kan behöva använda någon gång i framtiden, och det skulle vara snabbare att ha mycket redan gjort. Och, som nämnts ovan, finns det ytterligare "delprojekt" du kan lägga till i LLVM & Clang. Byggprocessen skapar också loggar som du senare kan kontrollera och arbeta utifrån om något går fel. Men efter att ha kört "sudo make install" tidigare, är din installerade LLVM & Clang inte beroende av någonting i den här katalogen, och utrymmet kan vara mycket dyrt, så du kan göra detta steg och återta 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 nu din nyare LLVM & Clang i /usr/local/bin, dina nyare 64-bitars LLVM & Clang libs i /usr/local/lib, och dina nyare LLVM & Clang inkluderar filer i /usr/local/include.

Lämna en kommentar

The Rise of Machines: Real World Applications of AI

The Rise of Machines: Real World Applications of AI

Artificiell intelligens är inte i framtiden, det är här i nuet I den här bloggen Läs hur Artificiell intelligens-applikationer har påverkat olika sektorer.

DDOS-attacker: En kort översikt

DDOS-attacker: En kort översikt

Är du också ett offer för DDOS-attacker och förvirrad över de förebyggande metoderna? Läs den här artikeln för att lösa dina frågor.

Har du någonsin undrat hur hackare tjänar pengar?

Har du någonsin undrat hur hackare tjänar pengar?

Du kanske har hört att hackare tjänar mycket pengar, men har du någonsin undrat hur de tjänar den typen av pengar? låt oss diskutera.

Revolutionerande uppfinningar från Google som gör ditt liv lätt.

Revolutionerande uppfinningar från Google som gör ditt liv lätt.

Vill du se revolutionerande uppfinningar av Google och hur dessa uppfinningar förändrade livet för varje människa idag? Läs sedan till bloggen för att se uppfinningar av Google.

Fredag ​​Essential: Vad hände med AI-drivna bilar?

Fredag ​​Essential: Vad hände med AI-drivna bilar?

Konceptet med att självkörande bilar ska ut på vägarna med hjälp av artificiell intelligens är en dröm vi har ett tag nu. Men trots flera löften finns de ingenstans att se. Läs den här bloggen för att lära dig mer...

Technological Singularity: A Distant Future of Human Civilization?

Technological Singularity: A Distant Future of Human Civilization?

När vetenskapen utvecklas i snabb takt och tar över en hel del av våra ansträngningar, ökar också riskerna för att utsätta oss för en oförklarlig singularitet. Läs, vad singularitet kan betyda för oss.

Funktioner för Big Data Reference Architecture Layers

Funktioner för Big Data Reference Architecture Layers

Läs bloggen för att känna till olika lager i Big Data Architecture och deras funktionaliteter på enklaste sätt.

Utveckling av datalagring – Infographic

Utveckling av datalagring – Infographic

Lagringsmetoderna för data har utvecklats kan vara sedan födelsen av data. Den här bloggen tar upp utvecklingen av datalagring på basis av en infografik.

6 fantastiska fördelar med att ha smarta hemenheter i våra liv

6 fantastiska fördelar med att ha smarta hemenheter i våra liv

I denna digitala värld har smarta hemenheter blivit en avgörande del av livet. Här är några fantastiska fördelar med smarta hemenheter om hur de gör vårt liv värt att leva och enklare.

macOS Catalina 10.15.4 tilläggsuppdatering orsakar fler problem än att lösa

macOS Catalina 10.15.4 tilläggsuppdatering orsakar fler problem än att lösa

Nyligen släppte Apple macOS Catalina 10.15.4, en tilläggsuppdatering för att åtgärda problem, men det verkar som om uppdateringen orsakar fler problem som leder till att mac-datorer blir murade. Läs den här artikeln för att lära dig mer