在安装过程中踩了很多坑,一度让我感到怀疑人生,因此我觉着有必要写一篇博客帮助后来的同学们避坑。
安装以下依赖:
$ sudo apt-get install build-essential curl libcap-dev git cmake libncurses5-dev python3-minimal python-pip unzip libtcmalloc-minimal4 libgoogle-perftools-dev libsqlite3-dev doxygen
$ pip3 install tabulate wllvm
$ apt install gcc g++
同时也要检查下自己服务器是否安装了cmake。没有就去安装cmake。官方网址:https://cmake.org/download/
千万注意!klee2.1只能安装llvm9,安装别的版本会报错! llvm9不能使用apt安装,在这里使用源码安装。
$ git clone https://github.com/llvm/llvm-project.git
$ cd llvm-project/
$ git checkout remotes/origin/release/9.x
$ git branch
$ mkdir build
$ cd build
$ cmake -DLLVM_ENABLE_PROJECTS=clang -DCMAKE_BUILD_TYPE=Release -G "Unix Makefiles" ../llvm
$ make -j 8
$ make install
注意执行make命令,-j的参数可以根据自己服务器的硬件配置调整。
$ wget https://github.com/Z3Prover/z3/archive/z3-4.8.8.zip
$ unzip z3-4.8.8.zip
$ cd z3-4.8.8
$ mkdir build
$ cd build
$ cmake -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++ ..
$ git clone https://github.com/klee/klee-uclibc.git
$ cd klee-uclibc
$ ./configure --make-llvm-lib
$ make -j 8
注意:默认情况下,环境中的 clang, llvm-config 都应该是 9.0 版本的,保持一致
$ wget https://github.com/klee/klee/archive/v2.1.zip
$ unzip v2.1.zip
$ cd klee-v2.1
$ mkdir build
$ cd build
$ cmake -DENABLE_SOLVER_Z3=ON -DENABLE_POSIX_RUNTIME=ON -DENABLE_KLEE_UCLIBC=ON -DKLEE_UCLIBC_PATH=/home/haoxin/symbolic-execution/klee-uclibc-v1.2 -DLLVM_CONFIG_BINARY=/home/haoxin/corpus-compilers/llvm-9.0/llvm-src/build/bin/llvm-config -DLLVMCC=/home/haoxin/corpus-compilers/llvm-9.0/llvm-src/build/bin/clang -DLLVMCXX=/home/haoxin/corpus-compilers/llvm-9.0/llvm-src/build/bin/clang++ -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++ ..
$ make -j8
$ make install
注意cmake后面的路径要根据自己服务器安装的路径进行替换
make后可能会出现各种错误,比如:
解决方法:
sudo apt install libunwind8-dev
git clone https://github.com/gperftools/gperftools.git
cd gperftools
sh autogen.sh
./configure
make all
make install
解决办法:
sudo apt-get install -y autoconf automake libtool
解决办法:
$ wget https://sourceforge.net/projects/libpng/files/zlib/1.2.8/zlib-1.2.8.tar.gz/download -o zlib-1.2.8.tar.gz
$ tar zvfx zlib-1.2.8.tar.gz
$ ./configure
$ make
$ make check
$ sudo make install