Installieren von Clang 5.0 und Verwenden von C ++ 17

17

Ich habe 3 Tage lang versucht, clang 5.0 auf einem Ubuntu 16.04-Rechner zu installieren. Ich habe verschiedene Anleitungen ausprobiert , aber nichts scheint zu funktionieren. Wenn ich versuche, einfach die neueste Version von SVN herunterzuladen und zu erstellen / installieren (wie hier beschrieben ), führt der Versuch, ein einfaches Programm zu kompilieren, zu folgenden Ergebnissen:

> clang++ basic.cpp
/usr/include/wchar.h:39:11: fatal error: 'stdarg.h' file not found
# include <stdarg.h>

Ich habe dann versucht, das -DGCC_INSTALL_PREFIXFlag cmakevor dem Erstellen zu setzen, aber das führt zu dem noch besseren Fehler:

> clang++ basic.cpp
fatal error: 'iostream' file not found
#include <iostream>

Die Schritte, die ich befolgt habe, sind (aus der obigen Anleitung):

> cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr/local/ \
-G "Unix Makefiles" path/to/llvm
...
> make
...
> make check-clang
...
> make install-clang
...

Könnte mich jemand wie einen Idioten behandeln und Schritt für Schritt erklären, wie man Clang 5.0 installiert? Oder weisen Sie mich auf einen Leitfaden hin, dem auch einfache Dummköpfe wie ich folgen können? Wenn Sie auch erklären können, wie Sie libc ++ für C ++ 17 erstellen und installieren, wäre ich Ihnen auf ewig dankbar.

Update : Anscheinend installiere ich clang nicht richtig, da dies die Ausgabe einer ausführlichen Zusammenstellung mit clang ist:

...
#include <...> search starts here:
 /usr/local/include
 /usr/include/x86_64-linux-gnu
 /usr/include

und das ist die Ausgabe für g ++:

#include <...> search starts here:
 /usr/include/c++/5
 /usr/include/x86_64-linux-gnu/c++/5
 /usr/include/c++/5/backward
 /usr/lib/gcc/x86_64-linux-gnu/5/include
 /usr/local/include
 /usr/lib/gcc/x86_64-linux-gnu/5/include-fixed
 /usr/include/x86_64-linux-gnu
 /usr/include
...
Steve D
quelle
Was ist die Ausgabe dieses Befehls:dpkg -l libstdc++-5-dev | tail -1
Ravexina
Hast du build-essentialinstalliert?
Ravexina
@Ravexina:ii libstdc++-5-dev:amd64 5.4.0-6ubuntu1~16.04.4 amd64 GNU Standard C++ Library v3 (development files)
Steve D
@Ravexina: und ja, build-essential ist installiert.
Steve D

Antworten:

33

Installieren Sie clang-5 von llvm.org repositores

Zuerst sollten wir die llvm.org-Repositorys zu unseren Quellenlisten hinzufügen. Die Zeile, die wir hinzufügen sollten, lautet:

deb http://apt.llvm.org/xenial/ llvm-toolchain-xenial-5.0 main

Öffne nano und füge die obige Zeile zu dieser Datei hinzu:

sudo nano /etc/apt/sources.list.d/llvm.list

Fügen Sie den Repository-Schlüssel hinzu, damit aptdie heruntergeladenen Pakete überprüft werden können.

 wget -O - http://apt.llvm.org/llvm-snapshot.gpg.key | sudo apt-key add -

Aktualisieren Sie anschließend Ihre Listen:

sudo apt-get update

Dann installiere clang-5:

sudo apt-get install clang-5.0 lldb-5.0 lld-5.0

Es sollte funktionieren.

Wenn Sie eine Liste aller verfügbaren Pakete aus diesem neu hinzugefügten Repository erhalten möchten:

grep -i package: /var/lib/apt/lists/apt.llvm* | cut -f3 -d: | sort | uniq

Es gibt Ihnen eine Liste wie:

clang-5.0 
clang-5.0-doc 
clang-5.0-examples 
libclang-common-5.0-dev
...

Sie können dann installieren, was Sie wollen.


Dies kann Ihrem Kompilierungsproblem helfen

Die erwähnte Header-Datei ist in Ihrem Fehler nicht vorhanden: stdarg.hist Teil des libstdc++-5-devPakets.

Ich habe dieses Paket auf meinem Computer. Wenn ich also Folgendes ausführe:

aptitude why libstdc++-5-dev

Ich werde bekommen:

i   build-essential Depends g++ (>= 4:5.2)                            
i A g++             Depends g++-5 (>= 5.3.1-3~)                       
i A g++-5           Depends libstdc++-5-dev (= 5.4.0-6ubuntu1~16.04.4)

So ist es , dass die Installation scheint build-essentialPaket lösen sollte diesen Fehler von Ihnen, denn ich bin nicht sicher , was du getan hast.

Ravexina
quelle
Ich habe build-essentialinstalliert. Aber die Ausgabe für my aptitude why libstdc++-5-devist genau die gleiche wie Ihre, außer dass es keine Build-Essential-Zeile gibt.
Steve D
@SteveD Ich bin mir nicht sicher, aber vielleicht liegt es daran, dass ein Teil Ihres Materials aus dem Repository installiert wird und der andere Teil manuell installiert wird, vielleicht gibt es einige Inkongruenzen in der Bibliotheksversion usw.
Ravexina
Ich habe den Fragenkörper mit dem aktualisiert, was meiner Meinung nach das Problem ist. Vielleicht wissen Sie, wie Sie es beheben können?
Steve D
@SteveD die Ausgabe sind in meinen Augen nicht so hilfreich, vielleicht finden andere sie hilfreicher. Warum installieren Sie es nicht aus Repositorys? Ich denke, es besteht eine hohe Wahrscheinlichkeit, dass Ihr Problem
verschwindet
Ich brauche Clang 5.0, der nicht in den Repositories verfügbar ist.
Steve D