boost.asio and pfring conflict

boost.asio and pfring conflict

本文关键字:conflict pfring and asio boost      更新时间:2023-10-16

我写了一个程序,使用pfring和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'

我该如何解决这个问题?

这不是boost和pfring之间的冲突。问题在这里解释:

/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头文件和pfring。如果没有,请更新它们。如果失败,请检查是否有旧的标头。如果是,请将其移除。在Ubuntu中,这可以从Computer Janitor应用程序中完成。如果所有其他操作都失败,请尝试卸载并重新安装pfringe。确保它是适合您的操作系统的版本!

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的系统上不起作用。hmmm…

我忘记了一个宏,添加到CFLAGS-DHAVE_PCAP。问题解决了。感谢大家