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_DONTFRAG定義しsetsockopt()、理解する必要があります。私が含めた他のすべてのヘッダーファイル:

#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その後のすべては、を含めようとしているときに、 と netdb.hの両方で以前に定義された構造体があることnetinet/in.hです。netdb.hを使用するコードのセクションはlinux/in6.h分離されていますか? その場合は、別のファイルを試してください。各ファイルは一種の名前空間であるため、さまざまなファイルを使用すると、競合が解消されると思います(Pythonのコンテキストで名前空間を考えています)。これについては 100% 確信があるわけではありませんが、後で確認します。

于 2013-01-07T19:17:05.637 に答える