我是一个尝试使用 KLEE 的初学者。我在使用 pthread 的 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++
并运行可执行文件时,该程序运行良好。
有人能告诉我哪里出错了吗?