zoukankan      html  css  js  c++  java
  • ubuntu16.04安装klee

    ubuntu16.04安装klee(基于llvm 3.8)教程

    前言

    查阅了很多资料,踩了不少的坑,总的来说,这个应该是比较完善的基于llvm3.8和ubuntu16.04的安装教程,至少我自己按照这个没有问题,而且可能遇到的坑也写在了这里。如果你有什么疑问,欢迎评论。

    进入klee官网

    http://klee.github.io/
    

    选择Documentation 的BuildingKLEE(LLVM3.8 - experimental)

    安装依赖包

    可以使用apt来进行依赖包安装

    $ sudo apt-get install build-essential	
    	curl libcap-dev git cmake libncurses5-dev	
    	python-minimal python-pip unzip libtcmalloc-minimal4 
    	libgoogle-perftools-dev
    

    安装llvm3.8

    先尝试执行

    $ sudo apt-get install clang-3.8 llvm-3.8 llvm-3.8-dev llvm-3.8-tools  
    

    如果报错,那就只能下载源代码进行安装

    源代码安装llvm3.8

    参考这个链接

    https://blog.csdn.net/mchtnwn/article/details/56676163
    

    在当前目录下建立文件夹

    mkdir ~/llvm-lang
    cd llvm-clang
    

    下载llvm源代码

    wget http://llvm.org/releases/3.8.0/llvm-3.8.0.src.tar.xz
    tar xf llvm-3.8.0.src.tar.xz
    mv llvm-3.8.0.src llvm
    

    下载clang的源代码

    cd llvm/tools
    wget http://llvm.org/releases/3.8.0/cfe-3.8.0.src.tar.xz
    tar xf cfe-3.8.0.src.tar.xz
    mv cfe-3.8.0.src clang
    cd ../..
    

    下载clang-tools-extra的源代码

    cd llvm/tools/clang/tools
    wget http://llvm.org/releases/3.8.0/clang-tools-extra-3.8.0.src.tar.xz
    tar xf clang-tools-extra-3.8.0.src.tar.xz
    mv clang-tools-extra-3.8.0.src  extra
    cd ../../../..
    

    下载compiler-rt的源代码

    cd llvm/projects
    wget http://llvm.org/releases/3.8.0/compiler-rt-3.8.0.src.tar.xz
    tar xf compiler-rt-3.8.0.src.tar.xz
    mv compiler-rt-3.8.0.src compiler-rt
    cd ../..
    

    配置编译选项

    cd llvm-lang
    mkdir llvm-build
    cd llvm-build
    ../llvm/configure --enable-optimized
    
    

    此种配置,llvm-clang默认安装到目录/usr/local下,如果想改变安装目录,则加上配置:
    --prefix=Path来指定输入。

    进入llvm-build目录

    执行

    make -j4
    sudo make install
    

    验证成功
    clang -v

    如果是3.8的话,那就表明安装成功

    安装求解器

    求解器有很多种,主流的有STP,Z3;
    这里我们安装Z3

    git clone https://github.com/Z3Prover/z3.git
    cd z3
    python scripts/mk_make.py
    cd build
    make
    sudo make install
    

    参考链接

    https://github.com/z3prover/z3
    

    安装uclibc和POSIX环境

    $ git clone https://github.com/klee/klee-uclibc.git  
    $ cd klee-uclibc  
    $ ./configure --make-llvm-lib  
    $ make -j2  
    $ cd ..
    

    下载Google test sources

    $ curl -OL https://github.com/google/googletest/archive/release-1.7.0.zip
    $ unzip release-1.7.0.zip
    

    安装lit

    $ pip install lit
    

    安装tcmalloc

    $ sudo apt-get install libtcmalloc-minimal4 libgoogle-perftools-dev
    

    下载klee源代码 并且配置

    $ git clone https://github.com/klee/klee.git
    $ mkdir klee_build_dir
    cd klee_build_dir
    $ cmake <CMAKE_OPTIONS> <KLEE_SRC_DIRECTORY>
    

    最后一行的<>内容是配置选项,可以这样写

    $ cmake -DENABLE_SOLVER_Z3=ON 
    	-DENABLE_POSIX_RUNTIME=ON  
    	-DENABLE_KLEE_UCLIBC=ON 
    	-DKLEE_UCLIBC_PATH=../klee-uclibc 
    	-DGTEST_SRC_DIR=../googletest-release-1.7.0  
    	-DENABLE_SYSTEM_TESTS=ON  
    	-DENABLE_UNIT_TESTS=ON 
    	../klee
    

    使用绝对路径有可能会编译失败,因此使用相对路径

    如果找不到doxygen,那就进行安装

    $ sudo apt-get install doxygen
    

    如果缺乏zlib,那么编译也会失败

    sudo apt-get install zlib1g-dev
    

    参考链接

    在ubuntu中安装zlib

    https://blog.csdn.net/wsclinux/article/details/50494501?utm_source=blogkpcl2
    

    编译安装klee

    $ make
    $ sudo make install
    

    安装注意事项

    参考链接
    http://terenceli.github.io/技术/2017/06/08/klee-newbie
    中使用了llvm3.9安装klee,但是官网最高只支持3.8,因此照搬会导致安装出错,
    这里就老老实实使用3.8

    使用docker安装klee

    $sudo apt install docker
    $sudo apt install docker.io
    $docker pull klee/klee
    
    $ git clone https://github.com/klee/klee.git
    $ cd klee
    $ docker build -t klee/klee .
    //创建一个klee的docker容器
    $ docker run --rm -ti --ulimit='stack=-1:-1' klee/klee
    
  • 相关阅读:
    SGU 495 Kids and Prizes 概率DP 或 数学推理
    poj 2799 IP Networks 模拟 位运算
    uva 202 Repeating Decimals 模拟
    poj 3158 Kickdown 字符串匹配?
    uva 1595 Symmetry 暴力
    uva 201 Squares 暴力
    uva 1594 Ducci Sequence 哈希
    uva 1368 DNA Consensus String 字符串
    数字、字符串、列表的常用操作
    if条件判断 流程控制
  • 原文地址:https://www.cnblogs.com/goto2091/p/13683275.html
Copyright © 2011-2022 走看看