我写了一个使用pf_ring和asio的程序,
我的节目如下:
#include <boost/asio.hpp>
#include <pfring.h>
int main(void) {
// ...
return 0;
}
我收到了错误:
In file included from /usr/local/include/pfring.h:46:0,
from test.cpp:2:
/usr/include/linux/if.h:136:8: error: redefinition of 'struct ifmap'
/usr/include/net/if.h:112:8: error: previous definition of 'struct ifmap'
/usr/include/linux/if.h:170:8: error: redefinition of 'struct ifreq'
/usr/include/net/if.h:127:8: error: previous definition of 'struct ifreq'
/usr/include/linux/if.h:219:8: error: redefinition of 'struct ifconf'
/usr/include/net/if.h:177:8: error: previous definition of 'struct ifconf'
如何解决此问题?
答案 0 :(得分:1)
这不是boost和pfringe之间的冲突。这里解释了这个问题:
/usr/include/linux/if.h:136:8: error: redefinition of 'struct ifmap'
/usr/include/net/if.h:112:8: error: previous definition of 'struct ifmap'
似乎问题是由Linux标头内的冲突引起的。首先,检查您是否拥有最新的Linux内核,Linux标头和pfringe。如果没有,请更新它们。如果失败,请检查您是否有任何旧标题。如果是这样,请删除它们。在Ubuntu中,这可以通过Computer Janitor应用程序完成。如果所有其他方法都失败了,请尝试卸载并重新安装pfringe。确保它是适合您操作系统的版本!
答案 1 :(得分:0)
linux标头坏了。在最新的ubuntu 11.10版本中,最新内核没有旧标题,以下程序无法编译。当我需要来自两个标题的部分时非常烦人,例如来自net / if.h的if_nametoindex()和来自linux / if_arp.h的ARPHRD_ETHER - 所以我所能做的就是将我需要的定义复制/粘贴到我的源代码中linux标题!!
#include <linux/if.h>
#include <net/if.h>
int main()
{
}
错误:
In file included from x.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 x.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
编辑:看起来这个错误已经在Linux内核包2.6.37-4.12中修复了:
https://bugs.launchpad.net/ubuntu/+source/eglibc/+bug/673073/comments/10
但由于某种原因,它不适用于我的基于Linux 3.0的系统。嗯...
答案 2 :(得分:0)
我忘记了一个宏,添加到CFLAGS -DHAVE_PCAP。它已经解决了。谢谢大家