2012-01-14 87 views
2

我写了一个程序女巫使用pfring和ASIO,Boost.Asio的和pfring冲突

我的程序,如:

#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' 

我怎样才能解决这个问题?

回答

1

这不是激励和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。确保它是适合您操作系统的适当版本!

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 

编辑:它看起来像这个bug已经被固定在Linux内核包2.6.37-4.12现在:

https://bugs.launchpad.net/ubuntu/+source/eglibc/+bug/673073/comments/10

但对于一些因为它不适用于我的系统,这是基于Linux 3.0的。嗯...

0

我忘了一个宏,添加到CFLAGS -DHAVE_PCAP。它解决了。谢谢大家