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

C++ 如何使用预编译的二进制文件安装CLang?,c++,installation,clang,ubuntu-12.04,precompiled-binaries,C++,Installation,Clang,Ubuntu 12.04,Precompiled Binaries,我如何在Ubuntu上安装CLang,使用我下载的CLang的预编译二进制文件 下面是我下载CLang的方式:“LLVM下载页面”->“下载LLVM 3.2”->“Ubuntu-12.04/x86_64的CLang二进制文件”() 然后,我将归档文件扩展到我的Ubuntu 12.04 LTS 64位机器上的一个文件夹中。展开文件夹的内容如下所示: $ ls clang+llvm-3.2-x86_64-linux-ubuntu-12.04 bin docs include lib shar

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

下面是我下载CLang的方式:“LLVM下载页面”->“下载LLVM 3.2”->“Ubuntu-12.04/x86_64的CLang二进制文件”()

然后,我将归档文件扩展到我的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和AutoToo工具编译和运行它。现在,我想用CLang编译同一个程序。

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

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

不管你把叮当的文件夹放在哪里,重要的是你以后不要移动它们。因此,将它们放在某个地方(我更喜欢$HOME,我将在下一次使用它)

然后:

  • 将其前置到$PATH变量
  • export PATH=~/clang+llvm-3.2-x86_64-linux-ubuntu-12.04/bin/:$PATH

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

    echo“export PATH=~/clang+llvm-3.2-x86\u 64-linux-ubuntu-12.04/bin/:\$PATH”>>~/.bashrc


  • 现在您可以执行clang++hello.cpp

    您可以执行中提到的相同步骤

    使用GNU tar:

    wget <clang-binaries-tarball-url> #  or `curl -O <url>`
    tar xf clang*
    cd clang*
    sudo cp -R * /usr/local/
    
    wget#或'curl-O`
    tar xf叮当声*
    cd叮当声*
    sudo cp-R*/usr/local/
    
    如果您的
    tar
    不是GNU并且

    • 您得到的归档文件是
      .tar.gz
      ,您可以使用
      tar-xzf
    • 如果您有
      .tar.xz
      存档,您可以使用
      tar-xJf
    • 对于
      .tar.bz2
      存档,可以使用
      tar-xjf

    我想在
    /home/s
    中安装clang。i、 e

    /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 7.0.0 (tags/RELEASE_700/final)
    Target: x86_64-unknown-linux-gnu
    Thread model: posix
    InstalledDir: /home/s/bin
    
    让我们用
    ex1.cpp

    #include <iostream>
    #include <filesystem>
    
    int main() {
        for(auto &file : std::filesystem::recursive_directory_iterator("./")) {
            std::cout << file.path() << '\n';
        }
    }
    
    运行它

    ./ex1
    
    输出:

    "./ex1"
    "./ex1.cpp"
    

    这些步骤不会解决链接到lib目录中的Clang库的问题。我发现的一个问题是使用Clang的AddressSanitizer。这需要(隐式)链接到Clang库。安装预构建的二进制文件时,我没有解决方案,但我希望我有。您可以按照我为$PATH显示的方式将lib文件夹添加到$LD_LIBRARY_路径。这为我实现了这一点,谢谢。我在
    tar xzf
    中遇到一个错误,“不是gzip格式”
    tarxf
    解决了这个问题。感谢Matrix,他们似乎改变了tarball压缩。我将其更新为更通用的
    tarxf
    。它不可能直接“解压缩到/usr/local”by@JackWu那里有额外的文件夹级别,因此您需要提取和复制或配置路径env var。。
    ./ex1
    
    "./ex1"
    "./ex1.cpp"