clang e clang ++ non trovati dopo l'installazione del pacchetto clang-3.5


26

Dopo aver installato il clang-3.5pacchetto, digitando clango clang++sulla riga di comando viene visualizzato un messaggio che indica in quali pacchetti è possibile trovare i programmi. Tentando di eseguire clang-3.5nuovamente l'installazione , apt indica che è già installato e all'ultima versione.

L'installazione originale è stata eseguita con il comando:

sudo apt-get install clang-3.5 llvm

build-essential è stato installato in precedenza.

Qualche idea su cosa potrebbe essere successo?

Risposte:


30

È lì, ma si chiama ancora clang-3.5.

Puoi eseguirlo come clang-3.5(o clang++-3.5) o impostare un link simbolico come ho fatto io (l'installazione di un normale clang non ha funzionato):

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

Brutta soluzione, forse; ma almeno funziona per ora :)


Per clang-6.0, devo fare anche questo:ln -s /usr/bin/llc-6.0 /usr/bin/llc
forza azzurri,

12

Il modo corretto di utilizzare clang come predefinito cce c++utilizzare update-alternatives:

È possibile che più programmi che soddisfano le stesse funzioni o funzioni simili siano installati contemporaneamente su un singolo sistema. Ad esempio, molti sistemi hanno diversi editor di testo installati contemporaneamente. Questo dà la scelta agli utenti di un sistema, consentendo a ciascuno di utilizzare un editor diverso, se desiderato, ma rende difficile per un programma fare una buona scelta dell'editor da invocare se l'utente non ha specificato una particolare preferenza.

quindi prima devi aggiungere clang-3.5oclang++-3.5 come alternativa ad esempio 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 in qualsiasi momento è necessario tornare a gccoppure g++è possibile utilizzare l' --configopzione:

sudo update-alternatives --config c++

Potresti aggiungere qualche spiegazione in più riguardo agli argomenti? Perché cc/ c++tra i due percorsi? Cos'è quello 100alla fine? Priorità?
helmesjo,

Dai un'occhiata ai update-alternativesdocumenti. Penso che abbiano una spiegazione migliore di qualsiasi cosa vorrei riassumere qui.
Yan Foto

5

Su Ubuntu 15.04 puoi anche installare il pacchetto clang lungo il pacchetto clang-xx. È quindi possibile digitare clang ++ e dovrebbe essere trovato l'eseguibile corrispondente.

sudo apt-get install clang

"Apt-get install clang" non installerebbe semplicemente l'ultima versione e la userebbe? Se l'OP sta installando v3.5, non vuole usare l'ultimo.
amfcosta,

4

Aggiungendo alla risposta di Yan Foto (e nel caso in cui il tuo obiettivo sia quello di ottenere un utilizzabile clangma non necessariamente usarlo come cc), puoi effettivamente aggiungere l'intero set di programmi in una volta sola 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

(Si noti che l'insieme di file binari fornito con ciascuna versione di clang potrebbe differire, ad esempio 3.6 ha clang-tblgen, 3.8 no.)

Se lo ripeti per ogni versione di clang installata, sarai in grado di passare da una all'altra usando un solo update-alternativescomando.

(Nel frattempo, a quanto pare, c'è ancora un dibattito in corso sull'opportunità di includere questi collegamenti con i pacchetti Ubuntu o meno: https://bugs.launchpad.net/ubuntu/+source/llvm-3.1/+bug/991493 )


0

Crea un file .bashrc nella tua home directory. Digita questa riga di codice.

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

Chiudi il tuo terminale. Aprilo di nuovo. Quindi prova a compilare nuovamente il programma.

Da quello che posso dire clang non funzionerà se non si afferma la versione nel nome del comando "clang ++ - 3.5". Quindi ho appena modificato il nome nel mio file .bashrc. Quindi devo solo digitare "clang ++".

A proposito, ho scaricato clang 3.5, quindi adatta i consigli precedenti alla tua versione.


0

Se clang è installato correttamente, un altro modo molto semplice per risparmiare la difficoltà di digitare il numero di versione insieme al nome del programma è quello di utilizzare la funzione di completamento automatico, ad esempio (con clang ++ - 3.5 installato):

clang+[TAB][ENTER]

Quindi devi solo digitare clang+, premere Tabe Enter. Funziona allo stesso modo con nomi di directory, nomi di file, ecc. (Ciò non ti aiuterà, tuttavia, se hai più di una versione di un programma installato).


0

Questo dovrebbe impostare le alternative di aggiornamento per clang- 4.0 se è installato clang- 3.8 (come su 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

Aggiungendo alla risposta di Johann Wendin sul collegamento simbolico. In una shell radice puoi collegare contemporaneamente tutti i vari strumenti di clang:

per esempio

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 quindi ripetere per:

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

Quindi tutto dovrebbe essere collegato, non solo una piccola selezione. (Forse ho ancora dimenticato qualcosa).

Questo troverà tutti i file secondo il modello in / usr / bin, rimuoverà tutti i numeri finali (-8 o -9 o anche -10), quindi creerà collegamenti simbolici su ciascuno.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.