21

如何使用我下载的 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 编译相同的程序。

4

3 回答 3

16

You can follow the same step as mentioned in https://askubuntu.com/questions/89615/how-do-i-install-llvm-clang-3-0

using GNU tar:

wget <clang-binaries-tarball-url> #  or `curl -O <url>`
tar xf clang*
cd clang*
sudo cp -R * /usr/local/

If your tar isn't GNU and

  • the archive you get is .tar.gz, you can use tar -xzf;
  • if you have .tar.xz archive, you can use tar -xJf;
  • for .tar.bz2 archive, you can use tar -xjf.
于 2013-09-12T13:03:34.720 回答
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

  1. 通过将其添加到 ~/.bashrc 使其永久化

    echo "导出路径=~/clang+llvm-3.2-x86_64-linux-ubuntu-12.04/bin/:\$PATH" >> ~/.bashrc

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

于 2013-08-03T18:07:54.430 回答
2

我想在/home/s. IE,

/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

让我们测试 C++17 文件系统ex1.cpp

#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"
于 2018-11-05T17:46:14.147 回答