質問: winpcapを用いたプログラミング visual c++ 2010expressを使ってます。 #include #include "pcap.h" int main() { return 0; } これをコンパイルすると、 fatal error c1083: include ファイルを開けません。'sys/time.h': no such file or directory とエラーが出ます。 pcap.hの #if defined(win32) #include #elif defined(msdos) #include #include /* u_int, u_char etc. */ #else /* un*x */ #include #include #endif /* win32/msdos/un*x */ の部分が原因だと思って #define win32 を付け加えると、エラーは出ませんでした。しかし、 #define win32 #include #include #include "pcap.h" int main() { return 0; } これでコンパイルすると下のようにエラーがでます。 1>c:\program files\microsoft sdks\windows\v7.0a\include\ws2def.h(91): warning c4005: 'af_ipx' : マクロが再定義されました。 1> c:\program files\microsoft sdks\windows\v7.0a\include\winsock.h(460) : 'af_ipx' の前の定義を確認してください 1>c:\program files\microsoft sdks\windows\v7.0a\include\ws2def.h(131): warning c4005: 'af_max' : マクロが再定義されました。 1> c:\program files\microsoft sdks\windows\v7.0a\include\winsock.h(479) : 'af_max' の前の定義を確認してください 1>c:\program files\microsoft sdks\windows\v7.0a\include\ws2def.h(168): warning c4005: 'so_dontlinger' : マクロが再定義されました。 1> c:\program files\microsoft sdks\windows\v7.0a\include\winsock.h(402) : 'so_dontlinger' の前の定義を確認してください 1>c:\program files\microsoft sdks\windows\v7.0a\include\ws2def.h(212): error c2011: 'sockaddr' : 'struct' 型の再定義 1> c:\program files\microsoft sdks\windows\v7.0a\include\winsock.h(485) : 'sockaddr' の宣言を確認してください。 1>c:\program files\microsoft sdks\windows\v7.0a\include\ws2def.h(390): error c2059: 構文エラー : '定数' 1>c:\program files\microsoft sdks\windows\v7.0a\include\ws2def.h(390): error c3805: '定数': 予期しないトークン。'}' か ',' が必要です。 1>c:\program files\microsoft sdks\windows\v7.0a\include\ws2def.h(524): warning c4005: 省略 'pcap_pkthdr::ts' が 未定義の struct 'timeval' で使用しています。 原因は何でしょうか
回答: 個人的には「どちらかというと winpcap が悪い」という感じかなぁと>#1. ちと読んだ限りでは ・winpcap (pcap.h) は winsock2.h を #include する ・windows.h は winsock.h と winsock2.h のいずれも #include されていない場合には winsock.h を #include する ・winsock.h と winsock2.h を両方 #include すると困る ので, 本質的には pcap.h を windows.h よりも前に #include する というのが解決策です. ただ, これは windows.h ではどうにも解決できない問題で, winpcap の方でそう言ってくれていればいいんだけどドキュメントには include the file pcap.h at the beginning of every source file that uses the functions exported by library. としか書いてないんだよね.... これが at the beginning じゃなくて at the very beginning なら (そして例の方もそれにあわせていれば) まだしも.