clang i clang ++ nie znaleziono po zainstalowaniu pakietu clang-3.5

26

Po zainstalowaniu clang-3.5pakietu, wpisanie clanglub clang++w wierszu poleceń wyświetla komunikat informujący, w których pakietach można znaleźć te programy. Próbując ponownie uruchomić instalację clang-3.5, apt stwierdza, że ​​jest już zainstalowany i najnowszej wersji.

Oryginalna instalacja została wykonana za pomocą polecenia:

sudo apt-get install clang-3.5 llvm

build-essential został zainstalowany wcześniej.

Jakieś pomysły na to, co mogło się stać?

Dr Spatula
źródło

Odpowiedzi:

30

Jest tam, ale nadal nazywa się clang-3.5.

Możesz wykonać go jako clang-3.5(lub clang++-3.5) lub skonfigurować dowiązanie symboliczne tak jak ja (instalacja zwykłego clang nie działała):

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

Być może brzydkie obejście; ale przynajmniej na razie działa :)

Johan Wendin
źródło
W przypadku clang-6.0 muszę to dodatkowo zrobić:ln -s /usr/bin/llc-6.0 /usr/bin/llc
forza azzurri,
12

Właściwym sposobem użycia szczęk jako domyślny cci c++jest w użyciu update-alternatives:

Możliwe jest zainstalowanie kilku programów spełniających te same lub podobne funkcje w jednym systemie w tym samym czasie. Na przykład wiele systemów ma zainstalowanych kilka edytorów tekstu jednocześnie. Daje to wybór użytkownikom systemu, pozwalając każdemu na użycie innego edytora, jeśli jest to pożądane, ale utrudnia programowi dokonanie dobrego wyboru edytora, jeśli użytkownik nie określi określonej preferencji.

więc najpierw musisz dodać clang-3.5lub clang++-3.5jako alternatywę dla np. gcci 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

Jeśli w dowolnym momencie musisz wrócić do gcclub g++możesz skorzystać z --configopcji:

sudo update-alternatives --config c++
Yan Foto
źródło
Czy możesz dodać dodatkowe wyjaśnienie dotyczące argumentów? Dlaczego cc/ c++pomiędzy dwiema ścieżkami? Co to 100w końcu jest? Priorytet?
helmesjo
Spójrz na update-alternativesdokumenty. Myślę, że mają lepsze wyjaśnienia niż cokolwiek, co tu streszczę.
Yan Foto
5

W systemie Ubuntu 15.04 można również zainstalować pakiet clang wraz z pakietem clang-xx. Następnie możesz wpisać clang ++ i należy znaleźć odpowiedni plik wykonywalny.

sudo apt-get install clang
tisch
źródło
Czy „apt-get install clang” nie po prostu zainstalowałby najnowszej wersji, a następnie jej użył? Jeśli OP instaluje wersję 3.5, nie chce używać najnowszej wersji.
amfcosta
4

Dodając do odpowiedzi Yan Foto (i na wypadek, gdyby Twoim celem było uzyskanie użytecznego, clangale niekoniecznie wykorzystującego go jako cc), możesz faktycznie dodać cały zestaw programów za jednym razem, używając

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

(Zauważ, że zestaw plików binarnych dostarczanych z każdą wersją clang może się różnić, np. 3.6 ma clang-tblgen, 3.8 nie.)

Jeśli powtórzysz to dla każdej zainstalowanej wersji clang, będziesz mógł przełączać się między nimi za pomocą jednego update-alternativespolecenia.

(Tymczasem najwyraźniej nadal trwa debata na temat tego, czy dołączyć te linki do pakietów Ubuntu, czy nie: https://bugs.launchpad.net/ubuntu/+source/llvm-3.1/+bug/991493 )

Latanius
źródło
0

Utwórz plik .bashrc w swoim katalogu domowym. Wpisz ten wiersz kodu.

alias clang ++ = "clang ++ - 3.5"

Zamknij terminal. Otwórz to ponownie. Następnie spróbuj ponownie skompilować swój program.

Z tego co wiem, clang nie zadziała, jeśli nie podasz wersji w nazwie polecenia „clang ++ - 3.5”. Więc właśnie aliasuję nazwę w moim pliku .bashrc. Więc muszę tylko wpisać „clang ++”.

Przy okazji pobrałem Clang 3.5, więc dostosuj poprzednią poradę do swojej wersji.

Digipen
źródło
0

Jeśli poprawnie zainstalowałeś klang, innym bardzo łatwym sposobem na zaoszczędzenie kłopotów z wpisaniem numeru wersji wraz z nazwą programu jest użycie funkcji autouzupełniania, na przykład (po zainstalowaniu klangu ++ - 3.5):

clang+[TAB][ENTER]

Musisz tylko pisać clang+, naciskać Tabi Enter. Działa tak samo z nazwami katalogów, nazw plików itp. (To jednak nie pomoże, jeśli masz zainstalowaną więcej niż jedną wersję programu).

smay
źródło
0

To powinno ustawić alternatywy aktualizacji dla clang- 4.0, jeśli clang- 3.8 (jak w Ubuntu 16.04) jest zainstalowany:

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
Bl00dh0und
źródło
0

Dodanie do odpowiedzi Johanna Wendina na temat symlinkowania. W powłoce root można jednocześnie połączyć wszystkie różne narzędzia clang:

na przykład

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

a następnie powtórz dla:

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

Wtedy wszystko powinno być powiązane, a nie tylko mały wybór. (Może wciąż coś zapomniałem).

To znajdzie wszystkie pliki zgodnie ze wzorcem w / usr / bin, usunie końcowe liczby (-8 lub -9 lub nawet -10), a następnie utworzy dowiązania symboliczne na każdym z nich.

CodeMonkey
źródło