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

kpd*_*dev 13 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;
}
Run Code Online (Sandbox Code Playgroud)

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

如何使用预编译二进制文件安装CLang相同的问题.很抱歉重复,但它真的非常有趣和重要.

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

我刚刚安装了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 ===|
Run Code Online (Sandbox Code Playgroud)

Mik*_*han 32

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

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

鉴于您正在使用GCC构建llvm程序,因此不清楚为什么要安装clang编译器.也许你想使用clang但你不知道Code :: Blocks可以支持clang编译器,或者不知道如何配置C :: B来使用clang.但是,让我们及时采取一件事.如果你正确设置了东西,你可以使用gcc构建这个llvm程序.而且 - 一个单独的问题 - 你可以正确安装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中,打开项目的Build选项并导航编译器设置 - > GCC的其他选项.在" 其他选项"编辑框中,从剪贴板粘贴编译器选项并将其确定.

  • 让llvm告诉你需要链接的库.在控制台运行中:

    llvm-config --libs

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

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

    llvm-config --ldflags

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

  • 现在重建你的项目,这次它只编译和链接只有一个未使用的变量的警告c(至少它对我来说).

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

如果您还想安装所有最新的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
Run Code Online (Sandbox Code Playgroud)

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

  • 在C :: B中,导航到GCC的编译器设置,然后单击" 复制"按钮.在" 添加新编译器"编辑框中,输入clang-3.4并单击"确定".然后按照C :: B提示您更新"工具链可执行文件"页面的提示进行操作.


Atr*_*opo 5

您可以使用LLVMrepo,将其添加到apt源并通过apt-getUbuntu数据包管理器安装,而不是手动安装它.有关如何执行此操作,请参阅LLVM apt repo.

按照安装段落中的说明,在终端中执行以下步骤:

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 
Run Code Online (Sandbox Code Playgroud)

  • 在执行`apt-get install`之前,请执行`sudo apt-get update` (4认同)