安装clang 5.0并使用C ++ 17


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>

然后,我尝试在构建之前将-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吗?还是向我指出即使是像我这样的基本傻瓜也可以遵循的指南?如果您还可以解释如何为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 Standard C++ Library v3 (development files)
史蒂夫·D

@Ravexina:是的,已经安装了build-essential。
史蒂夫·D

Answers:


33

从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安装好了。但是my的输出与您的输出aptitude why libstdc++-5-dev完全相同,只不过没有build-essential行。
史蒂夫·D

@SteveD我不确定,但这也许是因为您的部分内容是从存储库中安装的,而另一部分是手动安装的,也许是库版本等不匹配
。– Ravexina

我已用我认为的问题更新了问题正文,也许您知道如何解决该问题?
史蒂夫·D

@SteveD在我眼中输出不是那么有用,也许其他人发现它们更有用。为什么不从存储库安装它?我认为您的问题很有可能会消失
。– Ravexina

我需要clang 5.0,它在存储库中不可用。
史蒂夫·D
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.