Установка Clang 5.0 и использование C ++ 17

17

Я пытался в течение 3 дней установить Clang 5.0 на машине с Ubuntu 16.04. Я пробовал различные руководства , но ничего не работает. Когда я пытаюсь просто взять последнюю версию из SVN и собрать / установить (как подробно описано здесь ), попытка скомпилировать простую программу приводит к:

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

Затем я попытался установить -DGCC_INSTALL_PREFIXфлаг cmakeперед сборкой, но это приводит к еще лучшей ошибке:

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

Шаги, которые я выполнил (из вышеприведенного руководства):

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

Может ли кто-нибудь относиться ко мне как к идиоту и объяснять шаг за шагом, как установить clang 5.0? Или указываете мне на руководство, которому могут следовать даже такие дураки, как я? Если вы также можете объяснить, как собрать и установить libc ++ для C ++ 17, я был бы вам очень благодарен.

Обновление : Кажется, я неправильно устанавливаю Clang, так как это вывод многословной компиляции с Clang:

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

и это вывод для 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
...
Стив Д
источник
Каков вывод этой команды:dpkg -l libstdc++-5-dev | tail -1
Ravexina
Вы build-essentialустановили?
Равексина
@Ravexina:ii libstdc++-5-dev:amd64 5.4.0-6ubuntu1~16.04.4 amd64 GNU Standard C++ Library v3 (development files)
Стив Д
@Ravexina: и да, build-essential установлен.
Стив Д

Ответы:

33

Установите clang-5 из репозиториев llvm.org

Во-первых, мы должны добавить репозитории llvm.org в наши списки источников, добавив следующую строку:

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

Откройте nano и добавьте приведенную выше строку в этот файл:

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

Добавьте ключ репозитория, он aptсможет проверить загруженные пакеты.

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

После этого обновите свои списки:

sudo apt-get update

Затем установите Clang-5:

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

Он должен работать.

Если вы хотите получить список всех доступных пакетов из этого недавно добавленного репозитория:

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

Это даст вам список, как:

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

Затем вы можете установить все, что вы хотите.


Это может помочь вашей проблеме компиляции

Упомянутый заголовочный файл не существует в вашей ошибке: stdarg.hявляется частью libstdc++-5-devпакета.

У меня есть этот пакет на моей машине, так что если я запущу:

aptitude why libstdc++-5-dev

Я получу:

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)

Таким образом, кажется, что установка build-essentialпакета должна решить эту вашу ошибку, потому что я не уверен, что вы сделали.

Ravexina
источник
Я build-essentialустановил. Но вывод для my aptitude why libstdc++-5-devточно такой же, как у вас, за исключением того, что нет строки, необходимой для сборки.
Стив Д
@SteveD Я не уверен, но, может быть, это потому, что часть ваших материалов установлена ​​из репозитория, а другая часть установлена ​​вручную, возможно, есть некоторые несоответствия в версиях библиотек и т. Д.
Ravexina
Я обновил тело вопроса с тем, что, на мой взгляд, является проблемой, возможно, вы знаете, как это исправить?
Стив Д
@ SteveD результат не очень полезен в моих глазах, может быть, кто-то еще посчитает их более полезными. почему вы не устанавливаете его из репозиториев? Я думаю, что есть большая вероятность, что ваша проблема исчезнет ..
Равексина
Мне нужен Clang 5.0, который не доступен в репозиториях.
Стив Д