安装clang 5.0并使用C++17

我已经尝试了3天在Ubuntu 16.04机器上安装clang 5.0。我尝试了各种指南,但似乎都没有起作用。当我尝试从SVN获取最新版本并构建/安装(如此处所述)时,尝试编译一个简单的程序会导致以下问题:
> clang++ basic.cpp
/usr/include/wchar.h:39:11: fatal error: 'stdarg.h' file not found
# include <stdarg.h>

我接着尝试在构建之前为cmake设置-DGCC_INSTALL_PREFIX标志,但是这导致了一个更好的错误:
> 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吗?或者给我指点一个即使是像我这样的初学者也能跟随的指南?如果你还能解释如何构建和安装C++17的libc++,我将永远感激不尽。
更新: 看起来我没有正确安装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
@Ravexina: ii libstdc++-5-dev:amd64 5.4.0-6ubuntu1~16.04.4 amd64 GNU标准C++库v3(开发文件) - Steve D
@Ravexina:是的,已安装了build-essential。 - Steve D
1个回答

从llvm.org仓库安装clang-5

首先,我们需要将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.hlibstdc++-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软件包应该解决这个错误,因为我不确定你做了什么。

我已经安装了build-essential。但是我的aptitude why libstdc++-5-dev的输出与你的完全相同,除了没有build-essential这一行。 - Steve D
@SteveD 我不确定,但可能是因为你的一部分东西是从软件仓库安装的,另一部分是手动安装的,可能存在一些库版本不匹配等问题。 - Ravexina
我已经更新了问题描述,根据我的理解,这可能是问题所在,也许你知道如何修复吗? - Steve D
@SteveD,对我来说,输出结果并不是很有帮助,也许其他人会觉得更有帮助。为什么你不从软件仓库中安装它呢?我认为这样做的话,你的问题很可能会解决掉。 - Ravexina
我需要clang 5.0,但是在软件仓库中找不到。 - Steve D
@SteveD,我更新了我的答案,并添加了从官方llvm.org存储库安装clang-5的说明;这应该是安装clang-5的最佳方法。 - Ravexina
你是一个了不起的人。这个方法奏效了!在从那个仓库安装了一些其他东西之后,我还能够编译一些C++17代码!为了获取最新的libc++,我必须按照我上面链接的指南以及this question中的建议进行操作。再次感谢! - Steve D
@SteveD,不客气,很高兴能帮到你;) - Ravexina
libstdc++-5-dev是作为clang-5.0软件包依赖的一部分进行安装的。 - Mark Ingram