安装 clang 5.0 并使用 C++17

Ste*_*e D 17 compiling c++ cmake clang

我已经尝试了 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>
Run Code Online (Sandbox Code Playgroud)

然后我尝试在构建之前设置-DGCC_INSTALL_PREFIX标志cmake,但这导致了更好的错误:

> clang++ basic.cpp
fatal error: 'iostream' file not found
#include <iostream>
Run Code Online (Sandbox Code Playgroud)

我一直遵循的步骤是(来自上述指南):

> cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr/local/ \
-G "Unix Makefiles" path/to/llvm
...
> make
...
> make check-clang
...
> make install-clang
...
Run Code Online (Sandbox Code Playgroud)

有人可以像白痴一样对待我并逐步解释如何安装 clang 5.0 吗?或者给我指一个即使像我这样的基本傻瓜也可以遵循的指南?如果您还可以解释如何为 C++17 构建和安装 libc++,我将不胜感激。

更新:看来我没有正确安装 clang,因为这是使用 clang 进行详细编译的输出:

...
#include <...> search starts here:
 /usr/local/include
 /usr/include/x86_64-linux-gnu
 /usr/include
Run Code Online (Sandbox Code Playgroud)

这是 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
...
Run Code Online (Sandbox Code Playgroud)

Rav*_*ina 33

从 llvm.org 存储库安装 clang-5

首先,我们应该将 llvm.org 存储库添加到我们的源列表中,我们应该添加的行是:

deb http://apt.llvm.org/xenial/ llvm-toolchain-xenial-5.0 main
Run Code Online (Sandbox Code Playgroud)

打开 nano 并将上面的行添加到此文件中:

sudo nano /etc/apt/sources.list.d/llvm.list
Run Code Online (Sandbox Code Playgroud)

添加存储库密钥,它将apt能够验证下载的包。

 wget -O - http://apt.llvm.org/llvm-snapshot.gpg.key | sudo apt-key add -
Run Code Online (Sandbox Code Playgroud)

之后,更新您的列表:

sudo apt-get update
Run Code Online (Sandbox Code Playgroud)

然后安装clang-5:

sudo apt-get install clang-5.0 lldb-5.0 lld-5.0
Run Code Online (Sandbox Code Playgroud)

它应该工作。

如果您想从这个新添加的存储库中获取所有可用软件包的列表:

grep -i package: /var/lib/apt/lists/apt.llvm* | cut -f3 -d: | sort | uniq
Run Code Online (Sandbox Code Playgroud)

它会给你一个列表,如:

clang-5.0 
clang-5.0-doc 
clang-5.0-examples 
libclang-common-5.0-dev
...
Run Code Online (Sandbox Code Playgroud)

然后你可以安装任何你想要的。


它可能有助于您的编译问题

您的错误中不存在提到的头文件:stdarg.h是 package.json 的一部分libstdc++-5-dev

我的机器上有这个包,所以如果我运行:

aptitude why libstdc++-5-dev
Run Code Online (Sandbox Code Playgroud)

我会得到:

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)
Run Code Online (Sandbox Code Playgroud)

因此,安装build-essential软件包似乎应该可以解决您的这个错误,因为我不确定您做了什么。