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


26

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

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

sudo apt-get install clang-3.5 llvm

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

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

Ответы:


30

Это там, но это все еще называется 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-6.0 я должен сделать это дополнительно:ln -s /usr/bin/llc-6.0 /usr/bin/llc
forza azzurri

12

Правильный способ использовать 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++

Не могли бы вы добавить дополнительное объяснение относительно аргументов? Почему cc/ c++между двумя путями? Что это 100в итоге? Приоритет?
helmesjo

Посмотрите на update-alternativesдокументы. Я думаю, что у них есть лучшие объяснения, чем то, что я бы здесь суммировал
Ян Фото

5

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

sudo apt-get install clang

Не будет ли «apt-get install clang» просто установить последнюю версию, а затем использовать ее? Если OP устанавливает v3.5, он не хочет использовать последнюю версию.
amfcosta

4

Добавляя ответ Яна Фото (и на всякий случай, если вы хотите использовать его, 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-tblgen, 3.8 нет.)

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

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


0

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

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

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

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

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


0

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

clang+[TAB][ENTER]

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


0

Это должно установить альтернативы обновления для 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

0

Добавление к ответу Иоганна Вендина о символических ссылках. В 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), а затем создать символические ссылки для каждого.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.