如何安装clang预构建的二进制文件ubuntu 12.04

时间:2013-07-15 14:55:40

标签: ubuntu llvm

我是linux的新手,不知道我需要把Clang预先构建的二进制文件http://llvm.org/releases/download.html#3.3放在哪里。我下载它,用鼠标解压缩,并将/ bin的路径添加到我的$ PATH,并将/ lib的路径添加到$ LD_LIBRARY_PATH,并将带有my / lib路径的* .conf添加到/etc/ld.so.conf.d 。我甚至重启我的笔记本。
...但仍然无法使用Code :: Blocks GCC构建我的简单程序(错误:/home/aadgrand/tmp/LLVM-3.3/final/llvm.src/lib/Support/Signals.cpp - 对'dladdr'的未定义引用)。 测试程序的文本:

#include <iostream>
#include "llvm/IR/Module.h"
#include "llvm/IR/LLVMContext.h"
using namespace std;

int main()
{
    llvm::LLVMContext &c = llvm::getGlobalContext(); // error line
    cout << "Never printed" << endl;
    return 0;
}

我还需要做什么?也许我需要使用* .sig文件?嗯?

How to install CLang using precompiled binaries?相同的问题。 很抱歉重复,但它真的非常有趣和重要。

=====更新======

我刚刚安装llvm-3.1,与llvm-3.4相同的错误(来自预建的二进制文件):

-------------- Build: Debug in test2 ---------------

Compiling: main.cpp
Using built-in specs.
COLLECT_GCC=g++
COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/4.6/lto-wrapper
Target: x86_64-linux-gnu
Configured with: ../src/configure -v --with-pkgversion='Ubuntu/Linaro 4.6.3-1ubuntu5' --with-bugurl=file:///usr/share/doc/gcc-4.6/README.Bugs --enable-languages=c,c++,fortran,objc,obj-c++ --prefix=/usr --program-suffix=-4.6 --enable-shared --enable-linker-build-id --with-system-zlib --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --with-gxx-include-dir=/usr/include/c++/4.6 --libdir=/usr/lib --enable-nls --with-sysroot=/ --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --enable-gnu-unique-object --enable-plugin --enable-objc-gc --disable-werror --with-arch-32=i686 --with-tune=generic --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu
Thread model: posix
gcc version 4.6.3 (Ubuntu/Linaro 4.6.3-1ubuntu5) 
COLLECT_GCC_OPTIONS='-std=c++98' '-pg' '-g' '-v' '-Wall' '-fexceptions' '-I' '/usr/lib/llvm-3.1/include' '-c' '-o' 'obj/Debug/main.o' '-shared-libgcc' '-mtune=generic' '-march=x86-64'
 /usr/lib/gcc/x86_64-linux-gnu/4.6/cc1plus -quiet -v -I /usr/lib/llvm-3.1/include -imultilib . -imultiarch x86_64-linux-gnu -D_GNU_SOURCE /home/kpdev/projects/test2/test2/main.cpp -quiet -dumpbase main.cpp -mtune=generic -march=x86-64 -auxbase-strip obj/Debug/main.o -g -Wall -std=c++98 -version -p -fexceptions -fstack-protector -o /tmp/ccbKoBDJ.s
GNU C++ (Ubuntu/Linaro 4.6.3-1ubuntu5) version 4.6.3 (x86_64-linux-gnu)
    compiled by GNU C version 4.6.3, GMP version 5.0.2, MPFR version 3.1.0-p3, MPC version 0.9
GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072
ignoring nonexistent directory "/usr/local/include/x86_64-linux-gnu"
ignoring nonexistent directory "/usr/lib/gcc/x86_64-linux-gnu/4.6/../../../../x86_64-linux-gnu/include"
    #include "..." search starts here:
    #include <...> search starts here:
 /usr/lib/llvm-3.1/include
 /usr/include/c++/4.6
 /usr/include/c++/4.6/x86_64-linux-gnu/.
 /usr/include/c++/4.6/backward
 /usr/lib/gcc/x86_64-linux-gnu/4.6/include
 /usr/local/include
 /usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed
 /usr/include/x86_64-linux-gnu
 /usr/include
End of search list.
GNU C++ (Ubuntu/Linaro 4.6.3-1ubuntu5) version 4.6.3 (x86_64-linux-gnu)
    compiled by GNU C version 4.6.3, GMP version 5.0.2, MPFR version 3.1.0-p3, MPC version 0.9
GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072
Compiler executable checksum: 65b5171ac1bd7b3f07dbea6bdb24be3d
/home/kpdev/projects/test2/test2/main.cpp: In function ‘int main()’:
/home/kpdev/projects/test2/test2/main.cpp:11:24: warning: unused variable ‘c’ [-Wunused-variable]
COLLECT_GCC_OPTIONS='-std=c++98' '-pg' '-g' '-v' '-Wall' '-fexceptions' '-I' '/usr/lib/llvm-3.1/include' '-c' '-o' 'obj/Debug/main.o' '-shared-libgcc' '-mtune=generic' '-march=x86-64'
 as --64 -o obj/Debug/main.o /tmp/ccbKoBDJ.s
COMPILER_PATH=/usr/lib/gcc/x86_64-linux-gnu/4.6/:/usr/lib/gcc/x86_64-linux-gnu/4.6/:/usr/lib/gcc/x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/4.6/:/usr/lib/gcc/x86_64-linux-gnu/
LIBRARY_PATH=/usr/lib/gcc/x86_64-linux-gnu/4.6/:/usr/lib/gcc/x86_64-linux-gnu/4.6/../../../x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/4.6/../../../../lib/:/lib/x86_64-linux-gnu/:/lib/../lib/:/usr/lib/x86_64-linux-gnu/:/usr/lib/../lib/:/usr/lib/gcc/x86_64-linux-gnu/4.6/../../../:/lib/:/usr/lib/
COLLECT_GCC_OPTIONS='-std=c++98' '-pg' '-g' '-v' '-Wall' '-fexceptions' '-I' '/usr/lib/llvm-3.1/include' '-c' '-o' 'obj/Debug/main.o' '-shared-libgcc' '-mtune=generic' '-march=x86-64'



Linking console executable: bin/Debug/test2
/usr/lib/llvm-3.1/lib/libLLVMSupport.a(Signals.o): In function `PrintStackTrace(void*)':
(.text+0x6c): undefined reference to `dladdr'
/usr/lib/llvm-3.1/lib/libLLVMSupport.a(Signals.o): In function `PrintStackTrace(void*)':
(.text+0x187): undefined reference to `dladdr'
collect2: ld returned 1 exit status
Process terminated with status 1 (0 minutes, 0 seconds)
2 errors, 1 warnings


||=== Build finished: 2 errors, 1 warnings ===|

2 个答案:

答案 0 :(得分:32)

你问题的标题误导了我自己和Atropo。看起来好像 你想安装 clang C ++编译器并构建一个llvm Code :: Blocks中的C ++程序。

你实际上要做的是安装clang + llvm(它们实际上是 不同的东西)并在Code :: blocks中使用 GCC 构建一个llvm程序。 你确实说过&#34; Code :: Blocks GCC&#34;,但我认为这只是意味着 &#34;我使用GCC设置了Code :: Blocks,现在我想使用clang&#34;。 C :: B构建日志 但是,您添加的内容表明您使用GCC 构建

鉴于您正在使用GCC构建您的llvm程序,目前尚不清楚原因 你想安装clang编译器。也许你想使用clang而不是你 不知道Code :: Blocks可以支持clang编译器,或者不知道怎么做 配置C :: B使用clang。但是,让我们及时采取一件事。你可以构建 这个llvm程序与gcc,如果你只是正确设置的东西。 - 一个单独的问题 - 你可以正确安装clang。和 - 另一个单独的问题 - 如果需要,可以将C :: B配置为使用clang进行构建。

Atropo粘贴命令用于安装最新版本 clang及其调试器lldb。但是clang并不需要所有llvm库和 安装只是clang和lldb并没有提供你需要的所有库 建立你的llvm计划。

您在一条评论中说过,您已经能够构建您的程序 在终端中使用clang ++。这表明你在那时工作了 手动安装clang和llvm。但我不知道你是否还有一个 介入的混乱,无论如何我同意Atropo手动 安装此类复杂软件 - 自定义PATHLD_LIBRARY_PATH 等等 - 比包装中的托管安装要敏感得多 repoository,让包管理员把事情弄清楚。

首先,让我们在C :: B中用gcc构建你的llvm程序,为此,从一些开始 可能需要或可能不需要的预防措施:

  • 撤消所有自定义操作,并手动删除或隐藏 安装了clang / llvm二进制文件。

  • 让您的所有套餐保持最新状态。在控制台中,运行:

    sudo apt-get update

  • 确保您拥有构建C / C ++软件的所有基本软件包。在里面 控制台,运行:

    sudo apt-get install build-essential

完成预防措施。下一个:

  • 从标准的ubuntu 12.04存储库安装llvm。你会变老 一,v2.9,但现在很好:

    sudo apt-get install llvm

现在您已经拥有了所需的所有软件。保持该控制台方便并启动 简单的llvm项目中的C :: B.

  • 由于您现在有llvm的标准系统安装,请更改后两个 您的源代码的#include指令如下:

    #include <llvm/Module.h>

    #include <llvm/LLVMContext.h>

  • 让llvm告诉你需要传递给GCC的编译器选项。在里面 控制台运行:

    llvm-config --cxxflags

  • 将该命令的输出从控制台复制到剪贴板。在C :: B中, 打开项目的构建选项并导航编译器设置 - &gt; 其他选项 为GCC。在其他选项编辑框中,粘贴编译器选项 剪贴板并确定它。

  • 让llvm告诉您需要链接的库。在里面 控制台运行:

    llvm-config --libs

  • 将该命令的输出从控制台复制到剪贴板(这次 它有很多)。在C :: B中,导航构建选项 - &gt; 链接器设置 - &gt; 其他链接器选项。 在编辑框中,从剪贴板粘贴库选项并确定它。

  • 让llvm告诉你需要传递给链接器的(其他)选项。在里面 控制台运行:

    llvm-config --ldflags

  • 将该命令的输出从控制台复制到剪贴板。在C :: B中, 再次导航构建选项 - &gt; 链接器设置 - &gt; 其他链接器选项 在编辑框中,之后 - 重复,之后 - 您之前粘贴的库选项, 从剪贴板粘贴其他链接器选项并确定它。

  • 现在重建你的项目,这次它只会编译和链接 只对未使用的变量c发出警告(至少对我而言)。

这包括构建您的程序。如果您现在运行它,它将输出&#34;从不打印&#34;, 我想你不想要它;但这对你来说是一个问题:)它构建并运行。

如果您还想安装所有最新的llvm和clang软件包,请继续阅读。

  • 在软件源中安装适用于Ubuntu 12.04的llvm工具链

    sudo add-apt-repository 'deb http://llvm.org/apt/precise/ llvm-toolchain-precise main'

  • 安装该存储库的gpg密钥以验证其中的软件包下载。 注 此命令行上的最后连字符

    wget -O - http://llvm.org/apt/llvm-snapshot.gpg.key|sudo apt-key add -

  • 再次刷新包数据库:

    sudo apt-get update

  • 安装整个llvm + clang工具链:

    sudo apt-get install clang-3.4 clang-3.4-doc libclang-common-3.4-dev libclang-3.4-dev libclang1-3.4 libclang1-3.4-dbg libllvm-3.4-ocaml-dev libllvm3.4 libllvm3.4-dbg lldb-3.4 llvm-3.4 llvm-3.4-dev llvm-3.4-doc llvm-3.4-examples llvm-3.4-runtime cpp11-migrate-3.4 clang-format-3.4

  • 证明你有铿锵声3.4:

    clang -v

此命令应输出:

Ubuntu clang version 3.4-1~exp1 (trunk) (based on LLVM 3.4)
Target: x86_64-pc-linux-gnu
Thread model: posix

最后,您可能希望将C :: B配置为使用clang而不是GCC。我会 让你开始吧。

  • 在C :: B中,导航到GCC的编译器设置,然后单击复制按钮。 在添加新编译器编辑框中,输入clang-3.4并单击“确定”。然后 按照C :: B的提示,更新&#34;工具链可执行文件&#34;页

答案 1 :(得分:5)

您可以使用LLVM repo,将其添加到apt来源,然后通过apt-get或Ubuntu数据包管理器进行安装,而不是手动安装它。请参阅LLVM apt repo了解如何操作。

在终端中执行 Install 段落中所述的步骤:

sudo wget -O - http://llvm.org/apt/llvm-snapshot.gpg.key | sudo apt-key add -

sudo apt-get install clang-3.4 lldb-3.4