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

时间:2013-06-11 13:56:17

标签: c++ install clang ubuntu-12.04 precompiled-binaries

如何使用我下载的CLang预编译二进制文件在Ubuntu上安装CLang?

以下是我下载CLang的方法:“LLVM下载页面” - > “下载LLVM 3.2” - > “用于Ubuntu-12.04 / x86_64的Clang二进制文件”(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,这里不适用。

我是大多数这些工具的新手。我创建了一个基本的hello-world C ++程序,并且能够使用GCC和autotools编译和运行它。现在,我想用CLang编译相同的程序。

3 个答案:

答案 0 :(得分:12)

您可以按照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 :(得分:2)

假设您使用g ++ hello.cpp编译程序

gcc和g ++的等价物相应地是clang和clang ++。它们位于bin文件夹中。

在哪里放置clang的文件夹并不重要,重要的是你以后不要移动它们。所以把它们放在某个地方(我更喜欢$ HOME,我会假设下一个)

然后:

  1. 将其添加到$ PATH变量
  2. export PATH=~/clang+llvm-3.2-x86_64-linux-ubuntu-12.04/bin/:$PATH

    1. 通过将其添加到〜/ .bashrc

      来使其永久化

      echo“export PATH =〜/ clang + llvm-3.2-x86_64-linux-ubuntu-12.04 / bin /:\ $ PATH”&gt;&gt;的〜/ .bashrc

    2. 现在你可以做clang ++ hello.cpp

答案 2 :(得分:1)

我想在/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"