clang e clang ++ não encontrado após a instalação do pacote clang-3.5

26

Depois de instalar o clang-3.5pacote, digitar clangou clang++na linha de comando me dá uma mensagem informando em quais pacotes esses programas podem ser encontrados. Tentando executar a instalação clang-3.5novamente, o apt afirma que já está instalado e na versão mais recente.

A instalação original foi feita com o comando:

sudo apt-get install clang-3.5 llvm

build-essential foi instalado anteriormente.

Alguma idéia do que pode ter acontecido?

Dr. Spatula
fonte

Respostas:

30

Está lá, mas ainda é chamado clang-3.5.

Você pode executá-lo como clang-3.5(ou clang++-3.5) ou configurar um link simbólico para ele como eu fiz (a instalação de clang regular não funcionou):

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

Solução feia, talvez; mas pelo menos funciona por enquanto :)

Johan Wendin
fonte
Para o clang-6.0, eu tenho que fazer isso além disso:ln -s /usr/bin/llc-6.0 /usr/bin/llc
forza azzurri 10/10
12

A maneira correta de usar o clang como padrão cce c++é usar update-alternatives:

É possível que vários programas que executam as mesmas funções ou funções semelhantes sejam instalados em um único sistema ao mesmo tempo. Por exemplo, muitos sistemas têm vários editores de texto instalados ao mesmo tempo. Isso permite que os usuários de um sistema escolham, permitindo que cada um use um editor diferente, se desejado, mas dificulta que um programa faça uma boa escolha de editor para invocar se o usuário não tiver especificado uma preferência específica.

Então, primeiro você precisa adicionar clang-3.5ou clang++-3.5como alternativas a, por exemplo, gcce 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

Se, a qualquer momento, você precisar voltar para gccou g++usar a --configopção:

sudo update-alternatives --config c++
Yan Foto
fonte
Você poderia adicionar uma explicação extra sobre os argumentos? Por que cc/ c++entre os dois caminhos? O que é isso 100no final? Prioridade?
helmesjo
Dê uma olhada nos update-alternativesdocumentos. Eu acho que eles têm uma explicação melhor do que qualquer coisa que eu resumiria aqui.
Yan Foto
5

No Ubuntu 15.04, você também pode instalar o pacote clang ao longo do pacote clang-xx. Você pode digitar clang ++ e o executável correspondente deve ser encontrado.

sudo apt-get install clang
tisch
fonte
O "apt-get install clang" não instalaria simplesmente a versão mais recente e a usaria? Se o OP estiver instalando a versão 3.5, ele não deseja usar o mais recente.
Amfcosta
4

Adicionando a resposta de Yan Foto (e caso seu objetivo seja obter uma utilizável, clangmas não necessariamente utilizá-la como cc), você pode realmente adicionar todo o conjunto de programas de uma só vez usando

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

(Observe que o conjunto de binários que acompanham cada versão do clang pode ser diferente, por exemplo, 3.6 possui clang-tblgen, 3.8 não.)

Se você repetir isso para todas as versões do clang instaladas, poderá alternar entre elas usando apenas um único update-alternativescomando.

(Enquanto isso, aparentemente, ainda existe um debate em andamento sobre a inclusão ou não desses links nos pacotes Ubuntu: https://bugs.launchpad.net/ubuntu/+source/llvm-3.1/+bug/991493 )

Latanius
fonte
0

Crie um arquivo .bashrc no seu diretório pessoal. Digite esta linha de código.

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

Feche o seu terminal. Abra novamente. Em seguida, tente compilar seu programa novamente.

Pelo que sei, o clang não funcionará, a menos que você indique a versão no nome do comando "clang ++ - 3.5". Então, acabei de colocar o nome do meu arquivo .bashrc. Então eu só tenho que digitar "clang ++".

A propósito, eu baixei o clang 3.5, então ajuste o conselho anterior à sua versão.

Digipen
fonte
0

Se o clang foi instalado corretamente, outra maneira muito fácil de evitar o problema de digitar o número da versão junto com o nome do programa é usar o recurso de preenchimento automático, por exemplo (com o clang ++ - 3.5 instalado):

clang+[TAB][ENTER]

Então você só precisa digitar clang+, pressionar Tabe Enter. Funciona da mesma maneira com nomes de diretórios, nomes de arquivos etc. (no entanto, isso não ajudará se você tiver mais de uma versão de um programa instalada.)

smay
fonte
0

Isso deve definir as alternativas de atualização para o clang- 4.0 se o clang- 3.8 (como no Ubuntu 16.04) estiver instalado:

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
fonte
0

Adicionando a resposta de Johann Wendin sobre ligação simbólica. Em um shell raiz, você pode vincular todas as várias ferramentas de clang de uma só vez:

por exemplo

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

e repita para:

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

Então tudo deve estar vinculado, não apenas uma pequena seleção. (Talvez eu ainda tenha esquecido alguma coisa).

Ele encontrará todos os arquivos de acordo com o padrão em / usr / bin, remova quaisquer números finais (-8 ou -9 ou até -10) e crie links simbólicos em cada um.

CodeMonkey
fonte