美文网首页
安装带有gold-plugin的LLVM

安装带有gold-plugin的LLVM

作者: ChijinZ | 来源:发表于2018-04-23 15:50 被阅读0次

    前言

    众所周知,C语言编译器中,Clang比GCC编译速度更快,编译产出更小,出错提示更友好,所以能用Clang当然就会用Clang。但是装Clang还有一堆环境问题让人头疼,如果不是要用AFLGo,我也懒得把带有gold-plugin的LLVM这一套东西装起来。踩了一些坑,最终也算装成了。网上的教程千奇百怪,而且大部分比较老,最后我探索了一个比较简洁的安装方式,这里把安装的过程记录一下,方便日后回忆。
    我使用的是系统ubuntu 16.04 LTS,使用的是源码安装LLVM 6.0.0。

    安装

    在安装前先保证系统中有make,cmake,ninja(一个代替make的编译工具),python2.7,bitnutils(这个就是我们的gold-plugin)。

    apt-get install make cmake ninja-build python2.7 binutils-gold binutils-dev
    

    然后通过网站 http://releases.llvm.org/download.html 下载所需要的包(为什么不git或者svn下载?因为我这下载太慢,用浏览器会快一些)。所需的包有(这里以6.0.0为例,如果是其他版本就在对应版本下下载),:

    cfe-6.0.0.src                libcxx-6.0.0.src
    clang-tools-extra-6.0.0.src  libcxxabi-6.0.0.src
    compiler-rt-6.0.0.src        llvm-6.0.0.src
    

    PS:其实libcxx和libcxxabi不用也可以用AFL的llvm模式,这里顺便装了而已。

    下下来的包是tar.xz的两层压缩包,通过xz和tar解压($DOWNLOAD是包的位置):

    cd $DOWNLOAD
    xz -d 六个包
    tar -xvf 六个包
    

    然后把解压的六个包放在一个文件夹中:

    sudo mkdir src
    for i in *.src; do sudo mv $i src/$i; done
    cd src/
    

    接着把目录变得漂亮一些,为编译做准备:

    sudo mv cfe-6.0.0.src clang
    sudo mv clang llvm-6.0.0.src/tools
    
    sudo mv clang-tools-extra-6.0.0.src extra
    sudo mv extra/ llvm-6.0.0.src/tools/clang/
    
    sudo mv compiler-rt-6.0.0.src compiler-rt
    sudo mv compiler-rt llvm-6.0.0.src/projects/
    
    sudo mv libcxx-6.0.0.src libcxx
    sudo mv libcxx llvm-6.0.0.src/projects/
    
    sudo mv libcxxabi-6.0.0.src libcxxabi
    sudo mv libcxxabi llvm-6.0.0.src/projects/
    

    然后就可以开始cmake了,通过-G来指定ninja作为生成器。其中,-DLLVM_BINUTILS_INCDIR 是为了将BINUTILS的头文件引入,也就是我们的gold-plugin。。

    sudo mkdir build-6.0
    cd build-6.0/
    sudo cmake -G Ninja -DLIBCXX_ENABLE_SHARED=OFF -DLIBCXX_ENABLE_STATIC_ABI_LIBRARY=ON -DCMAKE_BUILD_TYPE=Release -DLLVM_TARGETS_TO_BUILD="X86" -DLLVM_BINUTILS_INCDIR=/usr/include ../llvm-6.0.0.src
    

    然后开始编译,这个编译期间可能会占用大量内存,虚拟机不一定能成功编译,请使用ninja -j2之类的语句来限定编译的作业数。我的电脑8G内存,跑起来还是很容易内存爆炸。

    sudo ninja
    sudo ninja install
    

    然后就安装结束了,查看一下版本看看是否安装成功即可。

    clang --version
    

    还有一件事,安装的时候如果没有设置 -DCMAKE_INSTALL_PREFIX 属性的话,会默认在usr/local下install。所以为了把诸如LLVMgold.so文件变为全局的,需要将相应的文件复制到usr/lib下。

    sudo mkdir /usr/lib/bfd-plugins
    sudo cp /usr/local/lib/libLTO.so /usr/lib/bfd-plugins
    sudo cp /usr/local/lib/LLVMgold.so /usr/lib/bfd-plugins

    相关文章

      网友评论

          本文标题:安装带有gold-plugin的LLVM

          本文链接:https://www.haomeiwen.com/subject/aqjllftx.html