boost.asio和pfring冲突

时间:2012-01-14 16:33:45

标签: c++ linux boost-asio

我写了一个使用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'

如何解决此问题?

3 个答案:

答案 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。它已经解决了。谢谢大家