linux/if.h和net/if.h有什么问题?

大宝剑*_*大宝剑 13 linux

在我的项目中,我包含了pfring.h,但编译错误:net/if.h和linux/if.h中的一些函数是重新定义的.我发现pfring.h包含linux/if.h所以,我测试一个程序,我的测试代码:

#include <linux/if.h>
#include <net/if.h>

int main(void) {
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

它预计编译错误.那么,linux/if.h和net/if.h有什么问题?我不能一次包括它们吗?


错误信息:

In file included from test.c:1:0:
/usr/include/linux/if.h:178:19: error: field 'ifru_addr' has incomplete type
/usr/include/linux/if.h:179:19: error: field 'ifru_dstaddr' has incomplete type
/usr/include/linux/if.h:180:19: error: field 'ifru_broadaddr' has incomplete type
/usr/include/linux/if.h:181:19: error: field 'ifru_netmask' has incomplete type
/usr/include/linux/if.h:182:20: error: field 'ifru_hwaddr' has incomplete type
In file included from test.c:2:0:
/usr/include/net/if.h:45:5: error: expected identifier before numeric constant
/usr/include/net/if.h:112:8: error: redefinition of 'struct ifmap'
/usr/include/linux/if.h:136:8: note: originally defined here
/usr/include/net/if.h:127:8: error: redefinition of 'struct ifreq'
/usr/include/linux/if.h:170:8: note: originally defined here
/usr/include/net/if.h:177:8: error: redefinition of 'struct ifconf'
/usr/include/linux/if.h:219:8: note: originally defined here
Run Code Online (Sandbox Code Playgroud)

Dmi*_*try 18

对我来说(在Ubuntu 12.04 x64上)以下包括解决了这个问题:

#include <sys/socket.h> // <-- This one
#include <linux/if.h>
#include <linux/if_tun.h>
Run Code Online (Sandbox Code Playgroud)


大宝剑*_*大宝剑 3

此问题已解决,添加编译标志 -DHAVE_PCAP 即可修复。;-)