在完成学习任务的过程中正好需要安装与配置klee和llvm,并且使用klee来测试GNU Coreutils。以下主要来自老师的安装指南,加上少量同学的讨论成果。经过10多次的失败,终于安装并运行成功,无法保证有些网站和下载包可能会因为墙的原因无法访问或下载。
相关环境参数
Virtual Box 6.1.4
Ubuntu 19.10
注意:在安装过程中会需要下载4个github仓库,注意目录的排列,推荐让这些仓库平级排布,如下图:
配置步骤
一、使用llvm 6.0 构建klee
根据官网的此篇指南(https://klee.github.io/build-llvm60/)来操作,但是有些步骤可能需要修改:
- Step 3 : 我在此处安装的是STP solver,按照这个网址(https://klee.github.io/build-stp/)里的步骤操作。
- Step 4 : 建议把网页上的
./configure --make-llvm-lib
替换成:
./configure --make-llvm-lib --with-llvm-config <llvm-config的可执行文件的path>
eg: 在我的系统中这条指令为:./configure --make-llvm-lib --with-llvm-config /lib/llvm-6.0/bin/llvm-config
- 忽略官网上Step 5 的命令,执行这个:
python -m pip install wllvm
- 跳过Step 6 和 7
- Step 9 : 官网上这个命令
cmake <CMAKE_OPTIONS> <KLEE_SRC_DIRECTORY>
的具体参数为 (以我系统的为例,请把指令中那些path换成你系统中的):
cmake -DENABLE_SOLVER_STP=ON -DENABLE_POSIX_RUNTIME=ON -DENABLE_KLEE_UCLIBC=ON -DENABLE_UNIT_TESTS=OFF -DENABLE_SYSTEM_TESTS=OFF -DKLEE_UCLIBC_PATH=/home/joy/Public/klee-uclibc -DLLVM_CONFIG_BINARY=/lib/llvm-6.0/bin/llvm-config -DLLVMCC=/lib/llvm-6.0/bin/clang -DLLVMCXX=/lib/llvm-6.0/bin/clang /home//joy/Public/klee
- Step 10 : 在运行完命令
make
之后,运行:
sudo make install
- 跳过 Step 11 和 12, 完成。
二、 使用Klee来test GNU Coreutils
在学习官网 tutorial 之前, 先运行下列命令:
sudo apt-get install autoconf automake autopoint gperf texinfo
git clone git://git.sv.gnu.org/coreutils
cd coreutils
./bootstrap
然后再按照官网 (https://klee.github.io/tutorials/testing-coreutils/)的步骤开始学习,需注意以下几点:
- ** Step 2 : ** 把官网的
pip install --upgrade wllvm
替换成:
python -m pip install --upgrade wllvm
再执行官网上的这条命令:
export LLVM_COMPILER=clang
接着再执行以下命令 (to make sure that the `clang’ command points to the clang-6.0 you installed earlier run the following commands):
(注意修改path)
sudo update-alternatives --install /usr/bin/clang++ clang++ /usr/bin/clang+±6.0 1000
sudo update-alternatives --install /usr/bin/clang clang /usr/bin/clang-6.0 1000
sudo update-alternatives --config clang
sudo update-alternatives --config clang++
- Step 3: 跳过官网上的这条命令
make -C src arch hostname
, 并且别忘了在执行命令find . -executable -type f | xargs -I '{}' extract-bc '{}'
之前执行下列命令:
(注意修改path)
sudo update-alternatives --install /usr/bin/llvm-link llvm-link /usr/bin/llvm-link-6.0 1000
sudo update-alternatives --config llvm-link
之后按照官网步骤走就好。
三、 常见问题
- 如果你遇到这些报错:
configure: error: in `/home/joy/Public/coreutils/obj-llvm’:
configure: error: C compiler cannot create executables
可以执行这条命令:
sudo -H python -m pip install wllvm
- 如果你在执行完 gcov echo 的结果中发现多出这种信息:
Cannot open source file …/src/echo.c
可以执行以下命令:
cd …
gcov src/echo