clang et clang ++ introuvables après l'installation du package clang-3.5


26

Après avoir installé le clang-3.5package, taper clangou clang++sur la ligne de commande me donne un message indiquant dans quels packages ces programmes peuvent être trouvés clang-3.5.

L'installation d'origine a été effectuée avec la commande:

sudo apt-get install clang-3.5 llvm

build-essential a été installé précédemment.

Des idées sur ce qui s'est peut-être passé?

Réponses:


30

Il est là, mais il s'appelle toujours clang-3.5.

Vous pouvez l'exécuter en tant que clang-3.5(ou clang++-3.5) ou configurer un lien symbolique vers lui comme je l'ai fait (l'installation de clang normal n'a pas fonctionné):

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

Contournement laid, peut-être; mais au moins ça marche pour l'instant :)


Pour clang-6.0, je dois le faire en plus:ln -s /usr/bin/llc-6.0 /usr/bin/llc
forza azzurri

12

La bonne façon d'utiliser clang par défaut ccet c++d'utiliser update-alternatives:

Il est possible d'installer plusieurs programmes remplissant les mêmes fonctions ou des fonctions similaires sur un même système en même temps. Par exemple, de nombreux systèmes ont plusieurs éditeurs de texte installés en même temps. Cela donne le choix aux utilisateurs d'un système, permettant à chacun d'utiliser un éditeur différent, si désiré, mais rend difficile pour un programme de faire un bon choix d'éditeur à invoquer si l'utilisateur n'a pas spécifié de préférence particulière.

vous devez donc d'abord ajouter clang-3.5ou clang++-3.5comme alternatives à eg gccet 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

Si, à tout moment, vous devez revenir à gccou g++vous pouvez utiliser l' --configoption:

sudo update-alternatives --config c++

Pourriez-vous ajouter quelques explications supplémentaires concernant les arguments? Pourquoi cc/ c++entre les deux voies? Qu'est-ce que c'est 100finalement? Priorité?
helmesjo

Jetez un œil aux update-alternativesdocuments. Je pense qu'ils ont de meilleures explications que tout ce que je résumerais ici.
Yan Foto le

5

Sur Ubuntu 15.04, vous pouvez également installer le package clang le long du package clang-xx. Vous pouvez ensuite taper clang ++ et l'exécutable correspondant devrait être trouvé.

sudo apt-get install clang

"Apt-get install clang" n'installerait-il pas simplement la dernière version, puis l'utiliser? Si l'OP installe la v3.5, il ne veut pas utiliser la dernière.
amfcosta

4

Ajout à la réponse de Yan Foto (et juste au cas où votre objectif est d'obtenir un utilisable clangmais pas nécessairement l'utiliser comme cc), vous pouvez réellement ajouter l'ensemble des programmes en une seule fois en utilisant

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

(Notez que l'ensemble des binaires fournis avec chaque version de clang peut différer, par exemple 3.6 en possède clang-tblgen, 3.8 non.)

Si vous répétez cela pour chaque version de clang que vous installez, vous pourrez basculer entre eux en utilisant une seule update-alternativescommande.

(En attendant, apparemment, il y a toujours un débat en cours sur l'inclusion ou non de ces liens avec les packages Ubuntu: https://bugs.launchpad.net/ubuntu/+source/llvm-3.1/+bug/991493 )


0

Créez un fichier .bashrc dans votre répertoire personnel. Tapez cette ligne de code.

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

Fermez votre terminal. Ouvrez-le à nouveau. Essayez ensuite de recompiler votre programme.

D'après ce que je peux dire, clang ne fonctionnera que si vous indiquez la version dans le nom de la commande "clang ++ - 3.5". J'ai donc simplement aliasé le nom dans mon fichier .bashrc. Je n'ai donc qu'à taper "clang ++".

Au fait, j'ai téléchargé clang 3.5, alors adaptez les conseils précédents à votre version.


0

Si vous avez correctement installé clang, un autre moyen très simple de vous éviter d'avoir à taper le numéro de version avec le nom du programme est d'utiliser la fonctionnalité de complétion automatique, par exemple (avoir clang ++ - 3.5 installé):

clang+[TAB][ENTER]

Il vous suffit donc de taper clang+, d'appuyer sur Tabet Enter. Fonctionne de la même manière avec les noms de répertoires, les noms de fichiers, etc. (Cela ne vous aidera cependant pas si vous avez plus d'une version d'un programme installée.)


0

Cela devrait définir les alternatives de mise à jour pour clang- 4.0 si clang- 3.8 (comme sur Ubuntu 16.04) est installé:

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

Ajout à la réponse de Johann Wendin sur le lien symbolique. Dans un root-shell, vous pouvez lier tous les différents outils de clang à la fois:

par exemple

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

puis répétez l'opération pour:

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

Ensuite, tout doit être lié, pas seulement une petite sélection. (Peut-être que j'ai encore oublié quelque chose).

Cela trouvera tous les fichiers selon le modèle dans / usr / bin, supprimera tous les numéros de fin (-8 ou -9 ou même -10), puis créera des liens symboliques sur chacun.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.