私はKLEEを使おうとしている初心者です。pthreads を使用する C++ プログラムで KLEE 自己完結型パッケージを使用しています。.o ファイルを生成し、次のオプションで KLEE を使用しました
klee --libc=uclibc --posix-runtime test.o
しかし、私は警告が表示されます
KLEE: NOTE: Using model:
/home/pgbovine/klee/Release+Asserts/lib/libkleeRuntimePOSIX.bca
KLEE: output directory = "klee-out-4"
KLEE: WARNING: undefined reference to function: klee_get_valuel
KLEE: WARNING: undefined reference to function: pthread_create
KLEE: WARNING: undefined reference to function: pthread_exit
KLEE: WARNING: undefined reference to function: pthread_join
KLEE: WARNING: executable has module level assembly (ignoring)
KLEE: WARNING: calling external: syscall(54, 0, 21505, 571522624)
KLEE: WARNING: calling __user_main with extra arguments.
KLEE: WARNING: calling external: pthread_create(571589384, 0, 563903904, 571574176)
0 klee 0x08965ab8
[pid 1846] +++ killed by SIGSEGV +++
+++ killed by SIGSEGV +++
Segmentation fault
.bc ファイルで klee を使用しても、同じ結果が得られます。
pthread 関数への未定義の参照を取得する理由がわかりません。pthreads のライブラリが適切に使用されているかどうかはわかりません。これを確実にする方法はありますか?llvm-ld を使用しても役に立ちません。
以下は、私が使用したllvm-ldコマンドです
llvm-ld tests.bc -l=/usr/lib/libpthread.a
セグメンテーション違反が発生する理由がわかりません。通常、プログラムをコンパイルしg++
て実行可能ファイルを実行すると、プログラムは正常に動作します。
誰かが私が間違っているところを教えてもらえますか?