pcap“未定义引用”错误

时间:2018-03-28 18:22:49

标签: wireshark pcap tcpdump

我正在尝试使用pcap_open_offline()从pcap文件中读取数据。我已经使用#include <pcap/pcap.h>并在一些调试后编译没有错误。现在我遇到了另一个我似乎无法弄清楚的问题。我写了以下函数:

void openPcap(char* filename){
  printf("Opening file %s\n", filename);
  pcap_t *pcap;
  const unsigned char *packet;
  char errbuf[PCAP_ERRBUF_SIZE];
  struct pcap_pkthdr header;
  pcap = pcap_open_offline(filename, errbuf);
  if (pcap == NULL){
    fprintf(stderr, "%s Malformed packet records in file %s",ER,filename);
  }
}

当我尝试编译时,我的pcap_open_offline调用给了我大约100个错误:

pcap-linux.c:(.text+0xcd4): undefined reference to 'nl_handle_alloc'
pcap-linux.c:(.text+0xce8): undefined reference to 'genl_connect'
pcap-linux.c:(.text+0xcf6): undefined reference to 'genl_ctrl_alloc_cache'
pcap-linux.c:(.text+0xd0e): undefined reference to 'genl_ctrl_search_by_name'
pcap-linux.c:(.text+0xd64): undefined reference to 'nl_handle_destroy'
pcap-linux.c:(.text+0xdd7): undefined reference to 'nl_cache_free'

这就是我的makefile的样子:

# -------------------------------
C=/afs/nd.edu/user14/csesoft/new/bin/gcc
CFLAGS=-Wall -std=c11 -I/afs/nd.edu/coursesp.18/cse/cse30341.01/support/gcc-libpcap/include -D_BSD_SOURCE
LD=/afs/nd.edu/user14/csesoft/new/bin/g++
#LD=g++
LDFLAGS=-lpthread
# # ----------------------------

LDFLAGS += -L/afs/nd.edu/coursesp.18/cse/cse30341.01/support/gcc-libpcap/lib -lpcap                 # Add your own flags here, or leave blank

threadedRE: threadedRE.o
    $(LD) $^ $(LDFLAGS) -o $@

threadedRE.o: threadedRE.c
    $(C) $(CFLAGS) -c $<

# C compiler
 %.o: %.c
    $(C) $(CFLAGS) -c $<

.PHONY: clean
clean:
    rm -f threadedRE *.o

我的标题是:

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <getopt.h>
#include <string.h>
#include <sys/stat.h>
#include <pcap/pcap.h>

任何建议都将不胜感激。

1 个答案:

答案 0 :(得分:1)

它不是编译错误,而是链接错误。在构建过程结束时,您应该看到类似&#34; ld退出时出现错误&#34;。

pcap_open_offline()似乎使用nl_handle_alloc()和其他函数,但链接器无法找到包含其实现的目标文件。通过将-lnl添加到LDFLAGS将链接器指向包含所需目标文件的适当库,应该可以解决问题。