如何使用预编译二进制文件安装CLang?

22
我如何在Ubuntu上安装CLang,使用我下载的CLang预编译二进制文件?这是我下载CLang的方法:"LLVM Download Page" -> "Download LLVM 3.2" -> "Clang Binaries for Ubuntu-12.04/x86_64" (http://llvm.org/releases/3.2/clang+llvm-3.2-x86_64-linux-ubuntu-12.04.tar.gz)。然后,我将存档文件解压到我的Ubuntu 12.04 LTS 64位机器上的一个文件夹中。展开后文件夹的内容如下:
$ ls clang+llvm-3.2-x86_64-linux-ubuntu-12.04
bin  docs  include  lib  share
问题:接下来我该做什么?我需要自己将这些复制到某些文件夹中吗?如果是,具体是哪些文件夹?大多数我在网上找到的指示都是用于从源代码构建CLang,这里不适用。
我对大多数这些工具都很陌生。我创建了一个基本的C++“Hello, world”程序,并能够使用GCC和autotools进行编译和运行。现在,我想使用CLang编译相同的程序。
3个回答

17
你可以按照https://askubuntu.com/questions/89615/how-do-i-install-llvm-clang-3-0中提到的步骤进行操作,使用GNU tar。
wget <clang-binaries-tarball-url> #  or `curl -O <url>`
tar xf clang*
cd clang*
sudo cp -R * /usr/local/
如果你的 tar 不是 GNU 的,那么:
  • 如果你得到的归档文件是 .tar.gz,你可以使用 tar -xzf
  • 如果你有 .tar.xz 归档文件,你可以使用 tar -xJf
  • 对于 .tar.bz2 归档文件,你可以使用 tar -xjf

1
这对我有用,谢谢。我使用tar xzf时出现了一个错误:“不是gzip格式”。但是,tar xf解决了问题。 - MatrixManAtYrService
谢谢Matrix,看起来他们改变了tarball的压缩方式。我将其更新为tar xf以使其更通用。 - Afriza N. Arief
可能可以直接将文件解压到 /usr/local 目录下 - Jack Wu
@JackWu,那里有一个额外的文件夹级别,所以你需要先提取和复制,或者之后配置PATH环境变量。 - Afriza N. Arief

4
假设您使用g ++ hello.cpp编译程序。 相应的gcc和g ++等价物为clang和clang ++。它们位于bin文件夹中。 放置clang文件夹的位置不重要,重要的是以后不要移动它们。所以将它们放在某个地方(我喜欢$ HOME,下面我会假定这一点) 然后: 1.将其添加到$ PATH变量中 export PATH =〜/ clang + llvm-3.2-x86_64-linux-ubuntu-12.04 / bin /:$ PATH 2.通过将其添加到〜/ .bashrc中使其永久化 echo“ export PATH =〜/ clang + llvm-3.2-x86_64-linux-ubuntu-12.04 / bin /:\$ PATH”>>〜/ .bashrc 现在您可以执行clang ++ hello.cpp

这些步骤不涉及链接到lib目录中的Clang库。我发现有一个问题是在使用Clang的AddressSanitizer时。这需要(隐式地)链接到Clang库。我没有解决方案来安装预构建的二进制文件,但我希望有。 - NoahR
你可以按照我展示$PATH的方式,将lib文件夹添加到$LD_LIBRARY_PATH中。 - A. Paschos

2

我想在/home/s中安装clang。

/home/s
   bin  
   lib
   include 
   ...

我在Ubuntu上进行了以下操作:

wget <clang-binaries-tarball-url>
sudo tar -xf <clang+llvm-..tar.xz> --strip-components=1 -C /home/s  

# Set the path environmental variable  
export PATH=/home/s/bin:$PATH

# Tell ldconfig about new shared library in /home/s/lib
cd /home/s
cat > libs.conf << "END"
/home/s/lib
END

sudo mv libs.conf /etc/ld.so.conf.d/libs.conf
sudo ldconfig

进行测试:

clang --version

输出结果为:
clang version 7.0.0 (tags/RELEASE_700/final)
Target: x86_64-unknown-linux-gnu
Thread model: posix
InstalledDir: /home/s/bin

让我们使用ex1.cpp测试C++17文件系统功能。

#include <iostream>
#include <filesystem>

int main() {
    for(auto &file : std::filesystem::recursive_directory_iterator("./")) {
        std::cout << file.path() << '\n';
    }
}

编译它。
clang++ -std=c++17 -stdlib=libc++ -Wall -pedantic ex1.cpp -o ex1 -lc++fs

执行它

./ex1

输出结果:
"./ex1"
"./ex1.cpp"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接