ubuntu 12.04 64位安裝KLEE過程中遇到的問題
問題一:llvm-gcc -v顯示gcc-4.6.3
情況:Ubuntu 12.04 64bit系統安裝後,修改為bupt的源,然後sudo apt-get update
。當時網路環境不好,官網llvm-gcc 4.2版本無法下載,於是就sudo apt-get install llvm-gcc-4.6
了(用tab鍵,自動提示的4.6版本),後來換了網路環境又裝了一遍llvm-gcc-4.2。前三步均沒有問題,到了安裝uclibc時出現錯我,第6步安裝KLEE也無法通過。
錯誤如圖:
/bin/llvm-dis invalid bitcode signature
Error:Failed to find a working LLVM bitcode compiler.
Maybe LLVM versions do not math
解決方案:
sudo apt-get remove llvm-gcc-4.6
解除安裝 llvm-gcc-4.6後重新安裝llvm-gcc-4.2(第二步:build LLVM 2.9)
問題二:安裝stp時候可能需要自己新建install目錄
cd stp-r940/
mkdir install
./scripts/configure --with-prefix='pwd'/install --with-cryptominisat2
make OPTIMIZE=-O2 CFLAGS_M32= install 這裡是O2不是零2
問題三:full-path-to-xxxxx
$ ./configure --with-llvm=full-path-to-llvm --with-stp=full-path-to-stp/install --with-uclibc=full-path-to-klee-uclibc --enable-posix-runtime
這裡面的full-path-to-xxxx
要寫相應的全目錄,比如我的full-path-to-llvm
對應為/home/[使用者名稱]/projects/llvm-2.9
問題四: Unable to use stp/c_interface.h header
configure: error:Unable to use stp/c_interface.h header
(圖片紅字有誤,是在安裝KLEE時候出現的錯誤)
解決方案:
cd /usr/include/ (這裡是系統的usr/include)
sudo mkdir stp
sudo cp ~/projects/stp-r940/src/c_interface/c_interface.h ./ (額~貌似我沒有拷貝到stp中,直接拷貝到了include目錄下,你可以拷貝到stp資料夾下試試)
問題五:make check假死狀態
(到56%時候可能需要一段時間,但是沒死,虛擬機器也沒有當機,當時我以為虛擬機器崩了就重啟了)
問題六:測試時找不到標頭檔案klee.h
error: klee/klee.h: No such file or directory
解決方法:
llvm-gcc -I ../../include -emit-llvm -c -g get_sign.c
Testing a Simple Regular Expression Library中提到編譯時要把/klee/include/庫連結上(使用-I 引數)
.bashrc最終新增的全域性變數
當你發現報的錯誤為找不到某個檔案時,可能是你的全域性變數沒配置。
最後我的.bashrc添加了一下內容:
export C_INCLUDE_PATH=/usr/include/x86_64-linux-gnu
export CPLUS_INCLUDE_PATH=/usr/include/x86_64-linux-gnu
export PATH=$PATH:/home/[使用者名稱]/projects/llvm-gcc4.2-2.9-x86_64-linux/bin
export PATH=$PATH:/home/[使用者名稱]/projects/llvm-2.9/Release+Asserts/bin
export PATH=$PATH:/home/[使用者名稱]/projects/klee/Release+Asserts/bin (如果此全域性變數不配置,klee執行時應該是找不到)
export LD_LIBRARY_PATH=/usr/lib/gcc/x86_64-linux-gnu/4.6.3
export LIBRARY_PATH=/usr/lib/x86_64-linux-gnu