Как установить LLVM и Clang на CentOS 6

LLVM - это инфраструктура компилятора с открытым исходным кодом. LLVM был запущен в 2000 году и широко использовался и модифицировался Apple с 2005 года. Clang - это компилятор C, C ++, Objective-C и Objective-C ++, который работает с системой LLVM. Clang был запущен Apple в 2007 году, и с тех пор Google и Intel стали участвовать в его дальнейшем развитии.

Разработчики Clang утверждают, что по сравнению с GCC он компилируется быстрее, использует меньше памяти, обеспечивает более удобную диагностику во время компиляции и совместим с GCC.

CentOS следует за разработкой Red Hat Enterprise Linux (RHEL). RHEL стремится быть стабильной серверной платформой, что означает, что он не спешит включать последние версии всего.

На момент написания этой статьи CentOS 6 официально распространял LLVM & Clang v3.4.2. Тем не менее, Clang v3.6 был выпущен.

Официальное предложение: если вам нужна более свежая версия LLVM & Clang, вы должны рассмотреть другой дистрибутив UNIX, который больше ориентирован на поддержку последних версий пакетов программного обеспечения.

К счастью, вы можете установить более новую версию LLVM & Clang GCC на CentOS. Это отличается от использования официально распространяемого программного обеспечения, но иногда вы можете чувствовать, что у вас мало выбора.

В этой статье описывается, как установить официально поддерживаемую версию CentOS 6 LLVM & Clang и как установить более новую версию. В этой статье предполагается, что у вас есть недавно установленный CentOS 6 VPS, однако вы, безусловно, можете следовать инструкциям на VPS, который вы уже использовали.

Clang в основном не зависит от GCC, но на момент написания этой статьи, Clang еще использует несколько разделяемых библиотек , установленные НКУ (а именно crtbegin.o, gccи gcc_s). Если вы установите LLVM & Clang в CentOS 6, вы ничего не сможете скомпилировать, если в вашей системе также нет GCC для этих общих библиотек. В идеале yum должен иметь пакетную зависимость для clang из gcc и gcc-c ++, но на момент написания этой статьи yum не знал о зависимости.

Кроме того, для сборки более новой версии LLVM & Clang из исходного кода требуется G ++ v4.7 +, который можно получить только в CentOS 6, установив его по исходному тексту.

Если вы выполните все приведенные ниже шаги, вы получите 2 версии GCC и 2 версии LLVM & Clang. Это включает официально поддерживаемую бинарную старую версию и более новую версию из исходного кода для каждой программы. Тем не менее, нет необходимости выполнять все шаги ниже. Вы можете решить, хотите ли вы использовать официально поддерживаемую бинарную старую версию LLVM & Clang или более новую версию из исходного кода, и запускать ту часть инструкций, которая соответствует вашему решению.

Установите официально поддерживаемую (старую) версию LLVM & Clang

  1. ВАЖНЫЙ! Во-первых, установите официально поддерживаемую (более старую) версию GCC, выполнив шаги, описанные в статье Как установить GCC на CentOS 6 - вам НЕ нужно выполнять шаги под заголовком этой статьи «Установить более новую версию GCC из исходного кода». ».

  2. Установить LLVM & Clang

    sudo yum install clang
        --- This will bring in llvm as a dependency
    
  3. Проверьте установленные версии и посмотрите их расположение.

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

Установите более новую версию LLVM & Clang из исходного кода

Чтобы собрать LLVM & Clang по источнику в CentOS, вы должны иметь GCC v4.7 или выше. CentOS 6 не имеет такого высокого уровня версии в yum, поэтому сначала нужно установить более свежую версию GCC из исходных текстов.

  1. ВАЖНЫЙ! Во-первых, установите более новую версию GCC из исходного кода, выполнив шаги, описанные в статье Как установить GCC на CentOS 6, - вам НЕОБХОДИМО выполнить все действия, описанные в этой статье, в том числе под заголовком «Установить более новую версию GCC из источник".

  2. Установите дополнительно необходимые пакеты.

    sudo yum install cmake
    
  3. Установите более новую версию Python. LLVM & Clang v3.6.0 требует Python v2.7 +, но в репозитории CentOS 6 yum есть только 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. Решите, какую версию LLVM & Clang вы хотите. Эта команда покажет вам «теги» для доступных версий.

    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. Получите исходный код нужной вам версии LLVM & Clang. Это будет длиться несколько минут. Остальная часть этой статьи написана для RELEASE_360/и будет загружать источники в ~/sourceInstallations/llvm_RELEASE_360/- Вам придется заменить соответствующий тег для соответствия будущим версиям. Приведенные ниже каталоги compiler-rt, libcxxи libcxxabiне являются абсолютно необходимыми, но содержат некоторые функции, которые есть у LLVM & Clang, которых нет у GCC, поэтому они включены в эту статью. Есть и другие «подпроекты» LLVM, которые вы можете использовать, такие как dragonegg, LLDB, OpenMB, vmkit, polly, libclc, klee, SAFECode и lld. Вы можете прочитать о них на веб-сайте LLVM .

    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. Сборка LLVM & Clang. Это будет работать некоторое время. Если это завершится правильно, последняя строка, которую вы увидите, будет говорить «успех». Это нормально, когда некоторые сообщения с ошибками прокручиваются быстро. Всегда полезно создавать вещи в другом каталоге, чем исходный каталог.

    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. Проверьте установленные версии и посмотрите их расположение.

    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. Добавьте новые библиотеки в ld (компоновщик GNU).

    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. При желании можно создать программу «Здравствуй, мир».

    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. Используйте LLVM & Clang, когда хотите.

    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. По желанию освободить место на жестком диске. Ваша ~/sourceInstallationsпапка будет занимать около 11 ГБ дискового пространства. Вероятно, целесообразно сохранить папки, так как есть дополнительные опции конфигурации, которые вам, возможно, понадобится использовать в будущем, и было бы быстрее, если бы многое уже было сделано. И, как упоминалось выше, есть дополнительные «подпроекты», которые вы можете добавить в LLVM & Clang. Кроме того, процесс сборки создает журналы, которые вы можете позже проверить и работать, если что-то пойдет не так. Но после запуска «sudo make install» ранее установленный LLVM & Clang не зависит от чего-либо в этом каталоге, и пространство может быть слишком дорогим, поэтому вы можете сделать этот шаг и освободить 11 ГБ.

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

Теперь у вас есть более новая версия LLVM & Clang /usr/local/bin, более новые 64-битные библиотеки LLVM & Clang /usr/local/libи более новые включаемые файлы LLVM & Clang /usr/local/include.

Оставить комментарий

Изучение 26 методов анализа больших данных: часть 1

Изучение 26 методов анализа больших данных: часть 1

Изучение 26 методов анализа больших данных: часть 1

Функциональные возможности уровней эталонной архитектуры больших данных

Функциональные возможности уровней эталонной архитектуры больших данных

Прочтите блог, чтобы узнать о различных уровнях архитектуры больших данных и их функциях самым простым способом.

6 невероятных фактов о Nintendo Switch

6 невероятных фактов о Nintendo Switch

Многие из вас знают Switch, который выйдет в марте 2017 года, и его новые функции. Для тех, кто не знает, мы подготовили список функций, которые делают «Switch» обязательным гаджетом.

Технические обещания, которые все еще не выполнены

Технические обещания, которые все еще не выполнены

Вы ждете, когда технологические гиганты выполнят свои обещания? проверить, что осталось недоставленным.

Как ИИ может вывести автоматизацию процессов на новый уровень?

Как ИИ может вывести автоматизацию процессов на новый уровень?

Прочтите это, чтобы узнать, как искусственный интеллект становится популярным среди небольших компаний и как он увеличивает вероятность их роста и дает преимущество перед конкурентами.

Технологическая сингулярность: далекое будущее человеческой цивилизации?

Технологическая сингулярность: далекое будущее человеческой цивилизации?

По мере того, как наука развивается быстрыми темпами, принимая на себя большую часть наших усилий, также возрастает риск подвергнуться необъяснимой сингулярности. Прочтите, что может значить для нас необычность.

CAPTCHA: как долго она может оставаться жизнеспособным методом различения между человеком и ИИ?

CAPTCHA: как долго она может оставаться жизнеспособным методом различения между человеком и ИИ?

CAPTCHA стало довольно сложно решать пользователям за последние несколько лет. Сможет ли он оставаться эффективным в обнаружении спама и ботов в ближайшем будущем?

Телемедицина и удаленное здравоохранение: будущее уже здесь

Телемедицина и удаленное здравоохранение: будущее уже здесь

Что такое телемедицина, дистанционное здравоохранение и их влияние на будущее поколение? Это хорошее место или нет в ситуации пандемии? Прочтите блог, чтобы узнать мнение!

Вы когда-нибудь задумывались, как хакеры зарабатывают деньги?

Вы когда-нибудь задумывались, как хакеры зарабатывают деньги?

Возможно, вы слышали, что хакеры зарабатывают много денег, но задумывались ли вы когда-нибудь о том, как они зарабатывают такие деньги? Давайте обсудим.

Обновление дополнения к macOS Catalina 10.15.4 вызывает больше проблем, чем решает

Обновление дополнения к macOS Catalina 10.15.4 вызывает больше проблем, чем решает

Недавно Apple выпустила macOS Catalina 10.15.4, дополнительное обновление для исправления проблем, но похоже, что это обновление вызывает больше проблем, приводящих к поломке компьютеров Mac. Прочтите эту статью, чтобы узнать больше