Как установить clang на ubuntu

Обновлено: 03.07.2024

Краткая инструкция по установке всех нужных для курса библиотек в Ubuntu

Содержание

На Linux рекомендуется использовать:

  • последнюю версию компилятора clang
  • последнюю версию системы сборки cmake
  • среду разработки CLion либо QtCreator

Библиотеки из основного репозитория

Множество C/C++ библиотек доступно в основном репозитории системы (предполагаем, что вы используете Ubuntu 16.04 LTS или старше). Следующие библиотеки используются в нашем курсе:

  • sdl2, sdl2-image, sdl2-mixer, sdl2-ttf в целях абстрагирования от операционной системы для создания окон, растеризации текстовых надписей, загрузки изображений с диска, загрузки и проигрывания звуковых файлов
  • assimp3 для загрузки 3D моделей из множества форматов файлов
  • bullet3 для расчёта столкновений в 3D пространстве
  • tinyxml2 для загрузки XML
  • glm для работы с линейной алгеброй в рамках задач 3D графики

Команда для установки данных библиотек:

Библиотека glbinding

Библиотека даёт прозрачный доступ к современным версиям OpenGL: программист использует API нужной ему версии, а glbinding сам запросит адреса функций выбранной версии у видеодрайвера. Рекомендуется использовать glbinding вместо обычных заголовков OpenGL.

Пакеты распространяются в специальном ppa:

После этого в CMake вы можете использовать find_package:

Библиотека anax

Библиотека используется для построения архитектуры программы на принципах Component-Entity-System. Для сборки склонируйте репозиторий и в каталоге клона вызовите cmake:

Далее выполните команду checkinstall, чтобы создать DEB-пакет “libanax-dev-custom” и установить его.

В установленном пакете находятся заголовки <anax/*.h> по пути /usr/local/include/ и библиотека libanax_s.a .

Библиотека nlohmann-json

Библиотека используется для загрузки и сохранения JSON. Для сборки склонируйте репозиторий и в каталоге клона вызовите cmake:

Далее выполните команду checkinstall, чтобы создать DEB-пакет “libnlohmann-json-dev-custom” и установить его.

Установка последней версии cmake

Перед началом удалите существующую версию CMake: sudo apt-get remove cmake .

Далее выполните команду checkinstall, чтобы создать DEB-пакет “cmake-custom” и установить его. Также вам нужно удалить системный пакет cmake перед началом установки.

Если скрипт завершился успешно, проверьте версию cmake в системе командой cmake --version :

Установка последней версии clang

  • скрипт get_clang.sh скачивает исходный код LLVM/Clang и собирает через CMake
  • скрипт install_clang.sh должен быть запущен через sudo, он соберёт и установит DEB-пакет “llvm-clang-custom”
  • файлы postinstall-pak и preremove-pak должны находиться рядом с install_clang.sh при сборке пакета

Также вам нужно удалить системные пакеты llvm и clang перед началом установки.

Если оба скрипта завершились успешно, проверьте версию clang в системе командой clang++ --version :

Используем clang по всей системе

Если у вас установлен clang, вы можете включить его в качестве компилятора по умолчанию:

Как установить clang 3.9 на Ubuntu 12.04

Наш старый сервер работает под управлением Ubuntu 12.04 и имеет версию clang 3.4.Сейчас мы проверяем Ubuntu 16.04. Из того, что я вижу, когда пытаюсь apt-get install clang - возможные версии для установки: от 3.5 до 3.9.

Я хочу иметь возможность протестировать новую версию clang на нашем старом сервере, прежде чем мы выполним обновление. Как я могу установить новую версию (3.9) на ubuntu 12.04? Я не могу найти это с помощью apt-get install .

Еще один аргумент, который, вероятно, имеет отношение к моей проблеме, - я работаю в автономном режиме.

  • Вы не сможете установить / скачать его из Интернета?
  • Вы сказали, что возможная версия для установки: 3.5 to 3.9 а затем сказал во втором абзаце can't find it using apt-get install ! Я не совсем понимаю. Вы отредактируете вопрос, чтобы прояснить ситуацию
  • 1 На 16.04 могу найти только 3.5 на 3.9. 12.04 могу найти до 3.4.
  • Я написал ответ. Проверьте, работает ли это

Кажется, вы можете установить clang 3.9 на Ubuntu 12.04.

1 - Вам необходимо добавить этот репозиторий в свой sources.list файл.

2- Затем вам нужно добавить ubuntu-toolchain-r/test ппа. Поскольку он предоставляет обновленные libstdc++ требуется clang 3.9

3 - Теперь обновите индекс репозитория

4 - Теперь вы можете установить clang 3.9

Если вам нужна помощь в установке пакета без Интернета, используйте решения из этого вопроса

  • Как я могу установить программное обеспечение или пакеты без Интернета (офлайн)?

Лучше всего сначала загрузить все пакеты в установку 16.04. Затем скопируйте их на USB-накопитель или что-то в этом роде, чтобы перенести на сервер 12.04. Затем установите все пакеты на сервер 12.04.

Скачивать clang и все его зависимости, выполните следующую команду из окна терминала. (Возможно, вы захотите создать отдельную папку для загрузки):

Примечание. Из имеющихся у меня репозиториев версии 16.04 по умолчанию загружен только clang 3.8.

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

Я провёл последние несколько месяцев, работая с Clang, фронтендом LLVM. Clang умеет парсить и анализировать любой исходный код на языках семейства С (C, C++, ObjectiveC, и т.п. ) и имеет удивительную модульную структуру, которая делает его простым в использовании.


Если вы ищете статический анализатор кода, я настоятельно рекомендую Clang, он существенно превосходит другие статические анализаторы (такие, как CIL. ) и хорошо документирован. Также список рассылки Clang очень активен и полезен, если вы застряли на чём-то.

Лично я использую Clang для статического анализа драйверов ввода-вывода ядра Linux, включая драйвера камеры и драйвера DRM графической карты. Код ядра, особенно код драйвера, может быть очень сложным и трудным для анализа, но Clang позволяет нам легко поддерживать его. Давайте посмотрим, что можно сделать с его помощью.

Как работает Clang?

В большинстве случаев, Clang запустит препроцессор (который разворачивает все макросы) и парсит исходник, превращая его в абстрактное синтаксическое дерево (AST). C AST работать гораздо проще, чем с исходным кодом, но вы всегда можете получить ссылки на исходник. Фактически, каждая структура в Clang-е, используемая для представления кода (AST, CFG и т.п.), всегда имеет ссылку на оригинальный исходник, полезный для целей анализа, рефакторинга и т.п.

если вам нужно анализировать и модифицировать код на уровне исходника, Clang лучше, чем LLVM. Анализ с помощью LLVM означает, что вы можете использовать язык внутреннего представления LLVM, похожий на ассемблер.

Clang AST

Практически каждый компилятор и статический анализатор использует AST для представления исходного кода. AST, используемое в Clang, очень детализированное и сложное, но вы получите удовольствие, изучая различные классы элементов Clang AST. Ниже приводится краткое введение в Clang AST, но самый простой путь изучить его, это просто делать дампы AST для простых исходников, и смотреть, какое AST им соответствует.

В общем, Clang AST сделано из двух очень гибких классов: Decl и Stmt. У обоих есть множество подклассов, вот несколько примеров:

FunctionDecl — прототип или объявление функции
BinaryOperator — бинарный оператор, например (a + b)
CallExpr — вызов функции, например, foo(x);

Большинство классов имеют «говорящие» имена, например, ForStmt, IfStmt, и ReturnStmt. Вы поймёте суть AST, поиграв с ним несколько минут. Вы можете найти документацию по классам AST, поискав что-либо вроде “Clang FunctionDecl.”

Как использовать Clang?

Clang может использоваться как прямая замена gcc и предлагает несколько крутых инструментов статического анализа. Как программист (а не как нормальный пользователь!), вы можете получить доступ к всей мощи clang, используя его как библиотеку одним из трёх способов, в зависимости от того, как вы решите.

Для начала, ознакомьтесь с описанием интерфейсов clang. В дополнение к тому, что написано в этом описании, я выделю другие существенные различия между различными интерфейсами clang.

Clang Plugin

Ваш код является плагином, и запускается каждый раз заново для каждого файла исходника, что означает, что вы не можете сохранять глобальную информацию или другую контекстную информацию между двумя разными исходными файлами (но вы можете запустить плагин для множества файлов последовательно). Плагин запускается путём передачи соответствующих опций системе компиляции (Clang, Make и т.п.) через аргументы командной строки. Это похоже на то, как вы включаете оптимизацию в GCC (т.е. "-O1"). Вы не можете запустить какую-либо свою задачу до или после того, как исходный файл будет проанализирован.

LibTooling (Clang Tool)

Ваш код — обычная программа на С++, с нормальной функцией main(). LibTooling используется для запуска некоторого анализа на исходном коде (с множеством файлов, при желании) без запуска обычного процесса компиляции. Новый экземпляр кода для анализа (и новый AST) будет создан для каждого нового файла исходника (как и в случае Clang Plugin), но вы можете сохранять контекстную информацию между файлами исходников в своих глобальных переменных. Так как у вас есть функция main(), вы можете запускать какие-либо задачи перед или после того, как clang завершит анализ ваших исходных файлов.

LibClang

Примечание: LibClang не даёт полный доступ к AST (только высокоуровневый доступ), но другие два варианта дают. Как правило, нам нужен полный доступ к AST.

Если вы не можете решить, что использовать, я бы порекомендовал начать с интерфейса LibTooling. Он проще, и работает так, как вы ожидаете. Он предлагает гибкость и полный доступ к AST, как и Plugin, без потери глобального контекста между исходными файлами. LibTooling не сложнее в использовании, чем Plugin.

Начинаем работать с Clang

Сейчас, когда вы знаете основы, давайте начнём! Эта инструкция будет работать на любой версии Linux (и, возможно, OS X), но тестировалось на Ubuntu. Вы можете получить LLVM и Clang, проделав следующие шаги (взято из официальной инструкции к Clang):

/static_analysis/). Будем называть её директорией верхнего уровня. Выполните следующие команды в терминале:


Компиляция LLVM и Clang займёт некоторое время.

Для проверки запустите:


Можно протестировать Clang, запустив классический пример Hello World:


В этом руководстве я использую Clang 3.4 на Ubuntu 13.04, но вы можете использовать другие варианты и того, и другого.


Мне нужно установить набор компиляторов clang и apt команда выдает ошибки. Я искал множество возможных решений, но пока ни одна из рекомендаций, которые я нашел для решения подобных проблем, не помогли. Вот что я получаю, когда пытаюсь apt install clang :

sudo apt-get install -f clang
Чтение списков пакетов . Готово Построение дерева зависимостей
Чтение информации о состоянии . Готово Некоторые пакеты не могут быть установлены. Это может означать, что вы запросили невозможную ситуацию или, если вы используете нестабильный дистрибутив, некоторые необходимые пакеты еще не созданы или перемещены из Incoming. Следующая информация может помочь разрешить ситуацию:

Следующие пакеты имеют неудовлетворенные зависимости: clang: Depends: clang-10 (> = 10

Я сделал все виды apt-get update и apt-get upgrade . Я также пытался перечислить каждый пакет один за другим, но список продолжает расти, и это не решило проблему.

Изменить: Следуя @Martin Konrad, я попробовал способность:

Ее решение - неэффективная установка.

  • Я так и не починил. Вместо этого я сам скомпилировал clang с нуля, и это сработало.

Похоже, вы по какой-то причине столкнулись с конфликтами. Основная причина может заключаться в том, что вы включили репозитории пакетов, отличных от Ubuntu, после обновления, которые не на 100% совместимы с Ubuntu 20.04? Если да, рассмотрите возможность удаления их из /etc/apt/sources.list.d/ и беги apt update .

  • 2 Как мне узнать, какие репозитории удалить из этого каталога? Установил aptitude и попробую.

Лично я столкнулся с этой проблемой и решил ее, установив LLVM с помощью сценария автоматической установки, который они упоминают на своей странице пакетов apt.

На самом деле вы довольно близки с предложением о способностях. Если вы посмотрите, что установлено, вы увидите, что версии этих пакетов для Ubuntu 18 все еще присутствуют.

sudo apt install libclang1-10=1:10.0.0-4ubuntu1 libllvm10=1:10.0.0-4ubuntu1

Полный aptitude затем позвольте мне продолжить, но удалил некоторые пакеты, которые следует отметить.

Читайте также: