clang и clang++ не найдены после установки пакета clang-3.5

После установки clang-3.5 пакет, набрав clang или же clang++ в командной строке выдает сообщение о том, в каких пакетах находятся эти программы. Попытка запустить установку clang-3.5 опять же, apt заявляет, что он уже установлен и в последней версии.

Первоначальная установка была выполнена с помощью команды:

sudo apt-get install clang-3.5 llvm

build-essential был установлен ранее.

Есть идеи о том, что могло случиться?

7 ответов

Это там, но это все еще называется clang-3.5.

Вы можете выполнить его как clang-3.5 (или же clang++-3.5) или установите символическую ссылку на него, как я (установка обычного clang не работает):

sudo ln -s /usr/bin/clang-3.5 /usr/bin/clang
sudo ln -s /usr/bin/clang++-3.5 /usr/bin/clang++

Гадкий обходной путь, возможно; но по крайней мере пока работает:)

Правильный способ использовать Clang в качестве значения по умолчанию cc а также c++ это использовать update-alternatives:

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

поэтому сначала нужно добавить clang-3.5 или же clang++-3.5 в качестве альтернативы, например, gcc а также g++:

sudo update-alternatives --install /usr/bin/cc cc /usr/bin/clang-3.5 100
sudo update-alternatives --install /usr/bin/c++ c++ /usr/bin/clang++-3.5 100

Если в любое время вам нужно переключиться обратно на gcc или же g++ Вы можете использовать --config опция:

sudo update-alternatives --config c++

В Ubuntu 15.04 вы также можете установить пакет clang вместе с пакетом clang-xx. Затем вы можете набрать clang++ и найти соответствующий исполняемый файл.

sudo apt-get install clang

Добавление к ответу Яна Фото (и на всякий случай ваша цель - получить пригодный для использования clang но не обязательно использовать его как cc), вы можете добавить весь набор программ за один раз, используя

sudo update-alternatives --install /usr/bin/clang clang /usr/bin/clang-3.8 380 \
--slave /usr/bin/clang++ clang++ /usr/bin/clang++-3.8 \
--slave /usr/bin/clang-check clang-check /usr/bin/clang-check-3.8 \
--slave /usr/bin/clang-query clang-query /usr/bin/clang-query-3.8 \
--slave /usr/bin/clang-rename clang-rename /usr/bin/clang-rename-3.8

(Обратите внимание, что набор двоичных файлов, поставляемых с каждой версией Clang, может отличаться, например, 3.6 имеет clang-tblgen3.8 нет.)

Если вы повторите это для каждой установленной версии Clang, вы сможете переключаться между ними, используя только одну update-alternatives команда.

(Между тем, по-видимому, все еще продолжаются дебаты о том, включать ли эти ссылки в пакеты Ubuntu или нет: https://bugs.launchpad.net/ubuntu/+source/llvm-3.1/+bug/991493)

Это должно установить альтернативы обновления для clang-4.0, если установлен clang-3.8 (как в Ubuntu 16.04):

sudo update-alternatives --install /usr/bin/clang clang /usr/bin/clang-4.0 100
sudo update-alternatives --install /usr/bin/clang++ clang++ /usr/bin/clang++-4.0 100
sudo update-alternatives --install /usr/bin/clang-apply-replacements clang-apply-replacements /usr/bin/clang-apply-replacements-4.0 100
sudo update-alternatives --install /usr/bin/clang-check clang-check /usr/bin/clang-check-4.0 100
sudo update-alternatives --install /usr/bin/clang-query clang-query /usr/bin/clang-query-4.0 100
sudo update-alternatives --install /usr/bin/clang-tidy clang-tidy /usr/bin/clang-tidy-4.0 100
sudo update-alternatives --install /usr/bin/scan-build scan-build /usr/bin/scan-build-4.0 100
sudo update-alternatives --install /usr/bin/scan-view scan-view /usr/bin/scan-view-4.0 100

Создайте файл.bashrc в вашем домашнем каталоге. Введите эту строку кода.

псевдоним clang++="clang++-3.5"

Закройте свой терминал. Откройте его снова. Затем попробуйте снова скомпилировать вашу программу.

Из того, что я могу сказать, clang не будет работать, если вы не укажете версию в имени команды "clang++-3.5". Поэтому я просто присвоил псевдониму имя в моем файле.bashrc. Так что мне нужно только набрать "clang ++".

Кстати, я скачал clang 3.5, так что настройте предыдущий совет для вашей версии.

Если у вас правильно установлен clang, другой очень простой способ избавить вас от необходимости набирать номер версии вместе с названием программы - это использовать функцию автозаполнения, например (с установленным clang++-3.5):

clang+[TAB][ENTER]

Так что вам нужно всего лишь набрать clang+, нажмите Tab и Enter. Аналогичным образом работает с именами каталогов, именами файлов и т. Д. (Однако, это не поможет, если у вас установлено более одной версии программы).

Добавление к ответу Иоганна Вендина о символических ссылках. В root-shell вы можете связать все различные инструменты Clang одновременно:

например

find /usr/bin/ -name clang*  | sed -E 's/^(\/usr\/bin\/.*)(\-[0-9]*)$/ln -s -v \1\2 \1/' | xargs -d '\n' -n 1 bash -c

и затем повторите для:

llc-*
lld-*
lldb-*
llvm-*

Тогда все должно быть связано, а не просто небольшой выбор. (Может я еще что то забыл).

Это позволит найти все файлы в соответствии с шаблоном в /usr/bin, удалить любые конечные числа (-8 или -9 или даже -10), а затем создать символические ссылки для каждого.

Другие вопросы по тегам