Llvm KLEE警告未定义函数

Llvm KLEE警告未定义函数,llvm,libraries,llvm-gcc,klee,Llvm,Libraries,Llvm Gcc,Klee,我已经将Wireshark编译成LLVM,然后我继续链接一些库,这些库我也编译成LLVM 我链接的库是libwsutil、libz和libpcap。然而,KLEE仍然对libpcap的未定义函数发出警告 我使用以下标志编译了libpcap: CC="llvm-gcc" CFLAGS="-flto -c" AR="llvm-ar" LD="llvm-ld" 这些标志也适用于其他库 原因可能是什么 KLEE: WARNING ONCE: function "capture_loop_dispatc

我已经将
Wireshark
编译成
LLVM
,然后我继续链接一些库,这些库我也编译成
LLVM

我链接的库是
libwsutil
libz
libpcap
。然而,KLEE仍然对
libpcap
的未定义函数发出警告

我使用以下标志编译了libpcap:

CC="llvm-gcc" CFLAGS="-flto -c" AR="llvm-ar" LD="llvm-ld"
这些标志也适用于其他库

原因可能是什么

KLEE: WARNING ONCE: function "capture_loop_dispatch" has inline asm
KLEE: WARNING ONCE: function "__user_main" has inline asm
KLEE: WARNING: undefined reference to function: __ctype_b_loc
KLEE: WARNING: undefined reference to function: __xstat64
KLEE: WARNING: undefined reference to function: bpf_image
KLEE: WARNING: undefined reference to function: cap_free
KLEE: WARNING: undefined reference to function: cap_init
KLEE: WARNING: undefined reference to function: cap_set_flag
KLEE: WARNING: undefined reference to function: cap_set_proc
...
...
KLEE: WARNING: undefined reference to function: lseek64
KLEE: WARNING: undefined reference to function: pcap_activate
KLEE: WARNING: undefined reference to function: pcap_breakloop
KLEE: WARNING: undefined reference to function: pcap_can_set_rfmon
KLEE: WARNING: undefined reference to function: pcap_close
KLEE: WARNING: undefined reference to function: pcap_compile
KLEE: WARNING: undefined reference to function: pcap_create
KLEE: WARNING: undefined reference to function: pcap_datalink
KLEE: WARNING: undefined reference to function: pcap_datalink_name_to_val
KLEE: WARNING: undefined reference to function: pcap_datalink_val_to_description
KLEE: WARNING: undefined reference to function: pcap_datalink_val_to_name
KLEE: WARNING: undefined reference to function: pcap_dispatch
KLEE: WARNING: undefined reference to function: pcap_findalldevs
KLEE: WARNING: undefined reference to function: pcap_free_datalinks
KLEE: WARNING: undefined reference to function: pcap_freealldevs
KLEE: WARNING: undefined reference to function: pcap_freecode
KLEE: WARNING: undefined reference to function: pcap_get_selectable_fd
KLEE: WARNING: undefined reference to function: pcap_geterr
KLEE: WARNING: undefined reference to function: pcap_lib_version
KLEE: WARNING: undefined reference to function: pcap_list_datalinks
KLEE: WARNING: undefined reference to function: pcap_lookupnet
KLEE: WARNING: undefined reference to function: pcap_open_live
KLEE: WARNING: undefined reference to function: pcap_set_buffer_size
KLEE: WARNING: undefined reference to function: pcap_set_datalink
KLEE: WARNING: undefined reference to function: pcap_set_promisc
KLEE: WARNING: undefined reference to function: pcap_set_rfmon
KLEE: WARNING: undefined reference to function: pcap_set_snaplen
KLEE: WARNING: undefined reference to function: pcap_set_timeout
KLEE: WARNING: undefined reference to function: pcap_setfilter
KLEE: WARNING: undefined reference to function: pcap_snapshot
KLEE: WARNING: undefined reference to function: pcap_stats
KLEE: WARNING: undefined reference to function: pcap_statustostr
KLEE: WARNING: undefined reference to function: prctl
阅读KLEE在

默认情况下,KLEE在关闭的程序(不使用任何 外部代码(如C库函数)。然而,如果你想 使用KLEE运行您希望启用KLEE POSIX的实际程序 运行时,它构建在uClibc库之上


因此KLEE不能默认使用C库函数,如果您使用带有选项
libc=uclibc
的KLEE,KLEE会将外部函数链接到您的IR代码中,并执行IR代码

您是为32位还是64位体系结构编译的?可能丢失的pcap函数的签名使用64位整数,就像丢失的lseek64一样。我正在使用32位机器编译所有内容。这可能是问题的根源。尝试暗示它使用32位变体(
-D…
选项?)。您可能需要查看源代码以了解如何做到这一点;搜索像
#ifdef…
这样的指令可能是一个好的开始…我查看了源代码,发现了
#define lseek64 lseek
,因此我假设有几行代码用于兼容性。删除它们应该可以做到这一点,但对于
libpcap
来说似乎不是问题。