Instalando o clang 5.0 e usando C ++ 17

17

Eu tenho tentado por 3 dias para instalar o clang 5.0 em uma máquina Ubuntu 16.04. Eu tentei vários guias , mas nada parece funcionar. Quando tento simplesmente pegar as últimas do SVN e compilar / instalar (conforme detalhado aqui ), tentar compilar um programa simples leva a:

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

Tentei definir o -DGCC_INSTALL_PREFIXsinalizador para cmakeantes da compilação, mas isso leva a um erro ainda melhor:

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

As etapas que eu tenho seguido são (no guia acima):

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

Alguém poderia me tratar como um idiota e explicar passo a passo como instalar o clang 5.0? Ou me aponte para um guia que até os tolos básicos como eu podem seguir? Se você também puder explicar como criar e instalar o libc ++ para C ++ 17, ficaria eternamente grato.

Atualização : Parece que não estou instalando o clang corretamente, pois esta é a saída de uma compilação detalhada com o clang:

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

e esta é a saída para 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
fonte
Qual é a saída deste comando:dpkg -l libstdc++-5-dev | tail -1
Ravexina 15/04
Você build-essentialinstalou?
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: e sim, o build-essential está instalado.
21717 Steve

Respostas:

33

Instale o clang-5 a partir dos repositórios llvm.org

Primeiro, devemos adicionar os repositórios llvm.org às nossas listas de fontes, a linha que devemos adicionar é:

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

Abra o nano e adicione a linha acima a este arquivo:

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

Adicione a chave do repositório, ela aptpoderá verificar os pacotes baixados.

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

Depois disso, atualize suas listas:

sudo apt-get update

Em seguida, instale o clang-5:

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

Deveria funcionar.

Se você deseja obter uma lista de todos os pacotes disponíveis deste repositório adicionado recentemente:

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

Isso lhe dará uma lista como:

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

Você pode instalar o que quiser.


Pode ajudar seu problema de compilação

O arquivo de cabeçalho mencionado não existe no seu erro: stdarg.hfaz parte do libstdc++-5-devpacote.

Eu tenho esse pacote na minha máquina, então se eu executar:

aptitude why libstdc++-5-dev

Eu vou receber:

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)

Parece que a instalação do build-essentialpacote deve solucionar esse erro, porque não tenho certeza do que você fez.

Ravexina
fonte
Eu build-essentialinstalei. Mas a saída para o meu aptitude why libstdc++-5-devé exatamente a mesma que a sua, exceto que não há uma linha essencial para a construção.
Steve D
@SteveD Não tenho certeza, mas talvez seja porque parte das suas coisas esteja instalada no repositório e a outra parte seja instalada manualmente, talvez haja alguma incompatibilidade na versão das bibliotecas etc.
Ravexina
Atualizei o corpo da pergunta com o que considero o problema, talvez você saiba como corrigi-lo?
Steve D
@SteveD a saída não é tão útil aos meus olhos, talvez alguém ache mais útil. por que você não o instala a partir de repositórios? Acho que há uma grande chance de seu problema vai embora ..
Ravexina
Preciso do clang 5.0, que não está disponível nos repositórios.
Steve D