clang und clang ++ wurden nach der Installation des Pakets clang-3.5 nicht gefunden

26

Nach der Installation des clang-3.5Pakets erhalte ich durch Eingabe von clangoder clang++in der Befehlszeile eine Meldung, in welchen Paketen sich diese Programme befinden. Beim Versuch, die Installation clang-3.5erneut auszuführen , gibt apt an, dass sie bereits installiert und auf dem neuesten Stand ist.

Die ursprüngliche Installation erfolgte mit dem Befehl:

sudo apt-get install clang-3.5 llvm

build-essential wurde zuvor installiert.

Irgendwelche Ideen, was passiert sein könnte?

Dr. Spatula
quelle

Antworten:

30

Es ist da, aber es heißt immer noch clang-3.5.

Sie können es entweder als clang-3.5(oder clang++-3.5) ausführen oder einen Symlink dazu einrichten, wie ich es getan habe (die Installation von regulärem Clang hat nicht funktioniert):

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

Vielleicht eine hässliche Abhilfe; aber zumindest funktioniert es jetzt :)

Johan Wendin
quelle
Für clang-6.0 muss ich das zusätzlich machen:ln -s /usr/bin/llc-6.0 /usr/bin/llc
forza azzurri
12

Der richtige Weg , Klirren als Standard zu verwenden ccund c++zu bedienen ist update-alternatives:

Es ist möglich, dass mehrere Programme, die die gleichen oder ähnliche Funktionen erfüllen, gleichzeitig auf einem System installiert sind. Beispielsweise sind auf vielen Systemen mehrere Texteditoren gleichzeitig installiert. Dies gibt den Benutzern eines Systems die Möglichkeit, einen anderen Editor zu verwenden, erschwert es jedoch einem Programm, eine gute Auswahl des aufzurufenden Editors zu treffen, wenn der Benutzer keine bestimmte Präferenz angegeben hat.

Als erstes müssen Sie clang-3.5oder clang++-3.5als Alternativen zu zB gccund hinzufügen 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

Wenn Sie zu irgendeinem Zeitpunkt zurückkehren müssen gccoder g++die --configOption verwenden können:

sudo update-alternatives --config c++
Yan Foto
quelle
Können Sie zusätzliche Erklärungen zu den Argumenten hinzufügen? Warum cc/ c++zwischen den beiden Pfaden? Was ist das 100am Ende? Priorität?
Helmesjo
Schauen Sie sich die update-alternativesDokumente an. Ich denke, sie haben bessere Erklärungen als alles, was ich hier zusammenfassen würde.
Yan Foto
5

Unter Ubuntu 15.04 können Sie das Paket clang auch zusammen mit dem Paket clang-xx installieren. Sie können dann clang ++ eingeben und die entsprechende ausführbare Datei sollte gefunden werden.

sudo apt-get install clang
Tisch
quelle
Würde "apt-get install clang" nicht einfach die neueste Version installieren und sie dann verwenden? Wenn das OP v3.5 installiert, möchte er nicht das neueste verwenden.
Amfcosta
4

Wenn Sie die Antwort von Yan Foto ergänzen (und nur für den Fall, dass Sie eine brauchbare verwenden möchten, diese clangaber nicht unbedingt als solche verwenden möchten cc), können Sie die gesamte Reihe von Programmen gleichzeitig mit hinzufügen

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

(Beachten Sie, dass die mit jeder Clang-Version gelieferten Binärdateien unterschiedlich sein können, z. B. 3.6 hat clang-tblgen, 3.8 nicht.)

Wenn Sie dies für jede installierte Clang-Version wiederholen, können Sie mit einem einzigen update-alternativesBefehl zwischen ihnen wechseln .

(In der Zwischenzeit wird offenbar immer noch diskutiert, ob diese Links in Ubuntu-Pakete aufgenommen werden sollen oder nicht: https://bugs.launchpad.net/ubuntu/+source/llvm-3.1/+bug/991493 )

Latanius
quelle
0

Erstellen Sie eine .bashrc-Datei in Ihrem Ausgangsverzeichnis. Geben Sie diese Codezeile ein.

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

Schließen Sie Ihr Terminal. Öffne es wieder. Versuchen Sie dann erneut, Ihr Programm zu kompilieren.

Soweit ich weiß, funktioniert clang nur, wenn Sie die Version im Befehlsnamen "clang ++ - 3.5" angeben. Also habe ich nur den Namen in meiner .bashrc-Datei gefiltert. Also muss ich nur "clang ++" eingeben.

Übrigens habe ich Clang 3.5 heruntergeladen, also passen Sie die vorherigen Ratschläge an Ihre Version an.

Digipen
quelle
0

Wenn Sie clang korrekt installiert haben, können Sie sich die Mühe ersparen, die Versionsnummer zusammen mit dem Namen des Programms einzugeben, indem Sie beispielsweise die automatische Vervollständigungsfunktion verwenden (wenn clang ++ - 3.5 installiert ist):

clang+[TAB][ENTER]

Sie müssen also nur tippen clang+, drücken Tabund Enter. Funktioniert genauso mit Namen von Verzeichnissen, Dateinamen usw. (Dies hilft Ihnen jedoch nicht, wenn Sie mehr als eine Version eines Programms installiert haben.)

smay
quelle
0

Dies sollte die Update-Alternativen für clang- 4.0 setzen, wenn clang- 3.8 (wie unter Ubuntu 16.04) installiert ist:

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

Ergänzung zu Johann Wendins Antwort zum Thema Symlinking. In einer Root-Shell können Sie alle verschiedenen Clang-Tools gleichzeitig verknüpfen:

z.B

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

und dann wiederholen für:

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

Dann sollte alles miteinander verbunden sein, nicht nur eine kleine Auswahl. (Vielleicht habe ich noch etwas vergessen).

Dies findet alle Dateien gemäß dem Muster in / usr / bin, entfernt alle nachfolgenden Zahlen (-8 oder -9 oder sogar -10) und erstellt dann jeweils Symlinks.

CodeMonkey
quelle