C PCAP库未知类型错误

was*_*256 11 pcap

我在我的linux系统上安装了pcap库,但是在包含它时我得到了错误

 /usr/include/pcap/bpf.h:88:1: error: unknown type name ‘u_int’
 /usr/include/pcap/bpf.h:108:2: error: unknown type name ‘u_int’
 /usr/include/pcap/bpf.h:1260:2: error: unknown type name ‘u_short’
 /usr/include/pcap/bpf.h:1261:2: error: unknown type name ‘u_char’
 /usr/include/pcap/bpf.h:1262:2: error: unknown type name ‘u_char’
 In file included from ../src/test.c:1:0:
 /usr/include/pcap/pcap.h:125:2: error: unknown type name ‘u_short’
 /usr/include/pcap/pcap.h:126:2: error: unknown type name ‘u_short’
 /usr/include/pcap/pcap.h:171:2: error: unknown type name ‘u_int’
 ...
 make: *** [src/test.o] Error 1
Run Code Online (Sandbox Code Playgroud)

包括我

 #include <pcap/pcap.h>
 #include <sys/types.h>
 #include <pcap-bpf.h>
Run Code Online (Sandbox Code Playgroud)

在节目中,我错过了什么?

小智 12

确保你没有定义任何:

  • __STRICT_ANSI__
  • _ISOC99_SOURCE
  • _POSIX_SOURCE
  • _POSIX_C_SOURCE
  • _XOPEN_SOURCE
  • _SVID_SOURCE

在构建程序时; 它们可能会阻止定义BSD数据类型,例如编译器所抱怨的数据类型.

  • 实际上,是的,你*通过指定`-std = c99`确定*至少定义其中一个.GCC手册页说`-std =`与`-ansi`具有相同的效果,`-ansi`定义`__STRICT_ANSI__`.`-std = c99`可以定义`_ISOC99_SOURCE`以及`__STRICT_ANSI__`,或者代替`__STRICT_ANSI__`.`-std = c99`表示你希望你的代码被编译为严格的ISO C99,这意味着它不能使用ISO C99中没有的任何功能 - 而且libpcap不是ISO C99,所以....如果你是尝试使用C99功能并且默认情况下不支持它们,请尝试`-std = gnu99`. (4认同)

GAB*_*KA6 9

尝试添加

     -D_BSD_SOURCE
Run Code Online (Sandbox Code Playgroud)

az一个CFLAG到您的Makefile.

  • 或者,考虑`-D_GNU_SOURCE`.这将允许您使用从BSD派生的功能,而无需链接BSD兼容性库.有关可以指定的不同值以及何时可以指定的更多信息,请参阅[功能测试宏上的GNU文档](https://www.gnu.org/software/libc/manual/html_node/Feature-Test-Macros.html).您需要使用BSD兼容性库. (6认同)