Installer clang 5.0 et utiliser C ++ 17

17

J'essaie depuis 3 jours d'installer clang 5.0 sur une machine Ubuntu 16.04. J'ai essayé différents guides , mais rien ne semble fonctionner. Lorsque j'essaye simplement de récupérer la dernière version de SVN et de construire / installer (comme détaillé ici ), essayer de compiler un programme simple conduit à:

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

J'ai ensuite essayé de définir le -DGCC_INSTALL_PREFIXdrapeau cmakeavant de construire, mais cela conduit à une erreur encore meilleure:

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

Les étapes que j'ai suivies sont (du guide ci-dessus):

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

Quelqu'un pourrait-il me traiter comme un idiot et expliquer étape par étape comment installer clang 5.0? Ou me diriger vers un guide que même les imbéciles de base comme moi peuvent suivre? Si vous pouvez également expliquer comment construire et installer libc ++ pour C ++ 17, je vous en serais éternellement reconnaissant.

Mise à jour : Il semble que je n'installe pas correctement clang, car c'est la sortie d'une compilation détaillée avec clang:

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

et voici la sortie pour 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
la source
Quelle est la sortie de cette commande:dpkg -l libstdc++-5-dev | tail -1
Ravexina
Avez-vous build-essentialinstallé?
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: et oui, build-essential est installé.
Steve D

Réponses:

33

Installer clang-5 à partir des référentiels llvm.org

Tout d'abord, nous devons ajouter les dépôts llvm.org à nos listes de sources, la ligne que nous devons ajouter est:

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

Ouvrez nano et ajoutez la ligne ci-dessus à ce fichier:

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

Ajoutez la clé du référentiel, cela permettra aptde vérifier les packages téléchargés.

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

Après cela, mettez à jour vos listes:

sudo apt-get update

Installez ensuite clang-5:

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

Ça devrait marcher.

Si vous souhaitez obtenir une liste de tous les packages disponibles à partir de ce référentiel nouvellement ajouté:

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

Il vous donnera une liste comme:

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

Vous pouvez ensuite installer ce que vous voulez.


Cela peut aider votre problème de compilation

Le fichier d'en-tête qui a été mentionné n'existe pas dans votre erreur: stdarg.hfait partie du libstdc++-5-devpackage.

J'ai ce package sur ma machine, donc si je lance:

aptitude why libstdc++-5-dev

J'aurai:

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)

Il semble donc que l'installation du build-essentialpackage devrait résoudre cette erreur, car je ne suis pas sûr de ce que vous avez fait.

Ravexina
la source
J'ai build-essentialinstallé. Mais la sortie de my aptitude why libstdc++-5-devest exactement la même que la vôtre, sauf qu'il n'y a pas de ligne essentielle à la construction.
Steve D du
@SteveD Je ne suis pas sûr, mais c'est peut-être parce qu'une partie de vos trucs sont installés à partir du référentiel et l'autre partie est installée manuellement, peut-être qu'il y a un décalage dans la version des bibliothèques, etc.
Ravexina
J'ai mis à jour le corps de la question avec ce que je pense être le problème, peut-être savez-vous comment le résoudre?
Steve D
@SteveD les sorties ne sont pas si utiles à mes yeux, peut-être que quelqu'un d'autre les trouve plus utiles. pourquoi ne l'installez-vous pas à partir de référentiels? Je pense qu'il y a de fortes chances que votre problème disparaisse ..
Ravexina
J'ai besoin de clang 5.0, qui n'est pas disponible dans les référentiels.
Steve D