Instalowanie clang 5.0 i używanie C ++ 17

17

Od 3 dni próbuję zainstalować clang 5.0 na maszynie Ubuntu 16.04. Próbowałem różnych przewodników , ale wydaje się, że nic nie działa. Kiedy próbuję po prostu pobrać najnowszą wersję SVN i zbudować / zainstalować (jak wyszczególniono tutaj ), próba skompilowania prostego programu prowadzi do:

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

Następnie próbowałem ustawić -DGCC_INSTALL_PREFIXflagę cmakeprzed budowaniem, ale to prowadzi do jeszcze lepszego błędu:

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

Kroki, które wykonałem to (z powyższego przewodnika):

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

Czy ktoś mógłby traktować mnie jak idiotę i wyjaśnić krok po kroku, jak zainstalować clang 5.0? Czy może wskazać mi przewodnik, do którego mogą podążać nawet tacy głupcy jak ja? Jeśli potrafisz także wyjaśnić, jak zbudować i zainstalować libc ++ dla C ++ 17, byłbym na zawsze wdzięczny.

Aktualizacja : Wygląda na to, że nie instaluję poprawnie clang, ponieważ jest to wynik pełnej kompilacji z clang:

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

i to jest wynik dla 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.
źródło
Jaki jest wynik tego polecenia:dpkg -l libstdc++-5-dev | tail -1
Ravexina,
Czy masz build-essentialzainstalowany?
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: i tak, zainstalowany jest build-essential.
Steve D

Odpowiedzi:

33

Zainstaluj clang-5 z repozytoriów llvm.org

Najpierw powinniśmy dodać repozytoria llvm.org do naszych list źródeł, wiersz, który powinniśmy dodać to:

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

Otwórz nano i dodaj powyższą linię do tego pliku:

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

Dodaj klucz repozytorium, aptumożliwi weryfikację pobranych pakietów.

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

Następnie zaktualizuj swoje listy:

sudo apt-get update

Następnie zainstaluj clang-5:

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

To powinno działać.

Jeśli chcesz uzyskać listę wszystkich dostępnych pakietów z tego nowo dodanego repozytorium:

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

Otrzymasz listę taką jak:

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

Następnie możesz zainstalować cokolwiek z nich chcesz.


Może to pomóc w problemach z kompilacją

Wspomniany plik nagłówkowy nie istnieje w twoim błędzie: stdarg.hjest częścią libstdc++-5-devpakietu.

Mam ten pakiet na moim komputerze, więc jeśli uruchomię:

aptitude why libstdc++-5-dev

Wezmę:

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)

Tak więc wydaje się, że zainstalowanie build-essentialpakietu powinno rozwiązać ten błąd twoje, bo nie jestem pewien, co zrobiłeś.

Ravexina
źródło
Mam build-essentialzainstalowany. Ale wynik dla mojego aptitude why libstdc++-5-devjest dokładnie taki sam jak twój, z wyjątkiem tym nie ma linii niezbędnej do kompilacji.
Steve D
@ SteveD Nie jestem pewien, ale może dlatego, że część twoich rzeczy jest instalowana z repozytorium, a druga część jest instalowana ręcznie, być może występują pewne niezgodności w wersjach bibliotek itp.
Ravexina 16.04.17
Zaktualizowałem treść pytania, co według mnie jest problemem, może wiesz, jak to naprawić?
Steve D
@ SteveD dane wyjściowe nie są tak pomocne w moich oczach, być może ktoś inny uzna je za bardziej pomocne. dlaczego nie instalujesz go z repozytoriów? Myślę, że istnieje duża szansa, że ​​Twój problem zniknie.
Ravexina,
Potrzebuję clang 5.0, który nie jest dostępny w repozytoriach.
Steve D.