参考网址:
CSDN:https://blog.csdn.net/goto2091/article/details/86602063
官网:http://klee.github.io/build-llvm60/
安装环境:ubuntu18.04
安装步骤:
安装依赖包:
sudo apt-get install build-essential
sudo apt-get install curl libcap-dev git cmake libncurses5-dev
sudo apt-get install python-minimal python-pip unzip libtcmalloc-minimal4
sudo apt-get install libgoogle-perftools-dev
安装LLVM6.0
sudo apt-get install clang-6.0 llvm-6.0 llvm-6.0-dev llvm-6.0-tools
安装求解器
求解器有很多种,主流的有STP、Z3
这里我们安装Z3
git clone https://github.com/Z3Prover/z3.git
cd Z3
python scripts/mk_make.py
cd build
Make
sudo make install
安装uclibc和POSIX环境
git clone https://github.com/klee/klee-uclibc.git
cd klee-uclibc
./configure --make-llvm-lib
找不到llvm-config:添加llvm-config路径解决
./configure --make-llvm-lib --with-llvm-config /usr/bin/llvm-config-6.0
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>
现在,进入build目录并运行CMake来配置KLEE,其中<KLEE_SRC_DIRECTORY>是您在步骤8中克隆的KLEE git存储库的路径。
<CMAKE_OPTIONS>是配置选项。 这些都记录在README-CMake.md中。
例如,如果您要使用STP,POSIX运行时,klee-uclibc和单元测试来构建KLEE,那么命令行将类似于以下内容:(来自于官网)
cmake
-DENABLE_SOLVER_STP=ON
-DENABLE_POSIX_RUNTIME=ON
-DENABLE_KLEE_UCLIBC=ON
-DKLEE_UCLIBC_PATH=<KLEE_UCLIBC_SOURCE_DIR>
-DENABLE_UNIT_TESTS=ON
-DGTEST_SRC_DIR=<GTEST_SOURCE_DIR>
-DLLVM_CONFIG_BINARY=<PATH_TO_llvm-config-6.0>
-DLLVMCC=<PATH_TO_clang-6.0>
-DLLVMCXX=<PATH_TO_clang+±6.0>
<KLEE_SRC_DIRECTORY>
其中<KLEE_UCLIBC_SOURCE_DIR>是指向klee-uclibc源代码树的绝对路径,而<GTEST_SOURCE_DIR>是指向Google Test源代码树的绝对路径。
我们输入得是:
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
报错如下:
找不到llvm-config,因为我们使用的是llvm-config 6.0因此我们建立一个软连接
此时重新cmake KLEE,发现仍有错误
提示安装SQLite3 接下来我们进行安装
这样建立后重新编译仍然显示SQLite3没有,因此我们换一种安装方法,使用如下命令:
sudo apt-get install sqlite3 libsqlite3-dev
接着重新编译,还是出现问题
这个问题的解决办法有两个:
①去网上找到缺少的这个库加进去
②重新下载一个klee源码,进行以上步骤
时间原因,没有接着解决这个问题,换了另外一种思路,在docker上安装klee。
注意:
使用绝对路径有可能会编译失败,因此使用相对路径
如果找不到doxygen,那就进行安装
sudo apt-get install doxygen
如果缺乏zlib,那么编译也会失败
sudo apt-get install zlib1g-dev
附上:
使用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