3

如果不出现这些重新定义错误,我无法将linux/in6.h标头包含到我的源代码中:

In file included from mypmtud.cc:30:0: /usr/include/linux/in6.h:30:8: error: redefinition of ‘struct in6_addr’ In file included from /usr/include/netdb.h:28:0,
             from mypmtud.cc:23: /usr/include/netinet/in.h:198:8: error: previous definition of ‘struct in6_addr’ In file included from mypmtud.cc:30:0: /usr/include/linux/in6.h:46:8: error: redefinition of ‘struct sockaddr_in6’ In file included from /usr/include/netdb.h:28:0,
             from mypmtud.cc:23: /usr/include/netinet/in.h:239:8: error: previous definition of ‘struct sockaddr_in6’ In file included from mypmtud.cc:30:0: /usr/include/linux/in6.h:54:8: error: redefinition of ‘struct ipv6_mreq’ In file included from /usr/include/netdb.h:28:0,
             from mypmtud.cc:23: /usr/include/netinet/in.h:275:8: error: previous definition of ‘struct ipv6_mreq’ make: *** [mypmtud] Error 1

如何将linux/in6.h文件包含到我的代码中?我需要linux/in6.h定义IPV6_DONTFRAGsetsockopt()理解这个选项。我包括的所有其他头文件:

#include <iostream>
#include <fstream>
#include <string>

#include <unistd.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <sys/uio.h>

#include <sstream>
#include <ctype.h>
#include <signal.h>
#include <map>
#include <errno.h>

#include <sys/time.h>
#include <netdb.h>
#include <arpa/inet.h>
#include <netinet/in.h>
#include <netinet/ip.h>
#include <netinet/ip_icmp.h>

我在 VirtualBox 4.2.6 上运行 Ubuntu 12.10。

4

1 回答 1

0

看起来与linux/in6.h有名称冲突netdb.h。如果您发现您需要的所有名称netdb.h都在其中,linux/in6.h您可以删除它,您应该没问题。此外,再次阅读它让我认为它可能已经包含在netinet/in.h您的内容中。

编辑

(来自下面的评论:)然后让我为您分解错误消息:/usr/include/linux/in6.h:30:8: error: redefinition of ‘struct in6_addr’ In file included from /usr/include/netdb.h:28:0即“struct in6_addr”已在 netdb.h 中定义。Nextnetinet/in.h还提供了导致另一个冲突的结构。之后的一切都是关于netinet/in6.h在尝试包含netinet/in.h. 使用netdb.hlinux/in6.h分离的代码部分是否存在?如果是这样,请尝试不同的文件。我认为对于不同的文件,您可能遇到的任何冲突都将被删除,因为每个文件都是一种命名空间(我正在考虑 python 上下文中的命名空间)。我不是 100% 确定这一点,但我稍后会检查。

于 2013-01-07T19:17:05.637 回答