我正在使用mingw32-make将项目编译到Windows,这依赖于一个名为libevent2的项目。我一直收到这个错误 -
util.h:69:25: fatal error: sys/socket.h: No such file or directory
显然,正在尝试包含Linux API中的文件,这在Windows上无效。经过进一步调查后,我发现只有在未定义 WIN32时才应包含此文件。
#ifdef WIN32
#include <winsock2.h>
#else
#include <sys/socket.h>
#endif
答案 0 :(得分:13)
您应该使用_WIN32
,也可以查看__CYGWIN__
#if defined _WIN32 || defined __CYGWIN__
答案 1 :(得分:9)
你确定没有任何定义WIN32
吗?我安装的MinGW(本站点为4.6.1)明确定义了它:
C:\temp>gcc -E -dM test.c | find /i "win"
#define _WIN32 1
#define __WINT_MAX__ 65535
#define _WINT_T
#define __WINT_MIN__ 0
#define __WIN32 1
#define __WINNT 1
#define __WINNT__ 1
#define __WIN32__ 1
#define __SIZEOF_WINT_T__ 2
#define WIN32 1 // <-- right here
#define __WINT_TYPE__ short unsigned int
#define WINNT 1
尝试传递-E -dM
选项,以验证您的MinGW编译器是否(或不是)预定义WIN32
宏。
请注意,严格来说,WIN32
不应该由编译器预定义(因为它在用户的命名空间中) - 只有_WIN32
应该。 WIN32
应该由正在使用的SDK和/或构建环境设置 - 这就是它在Microsoft编译器中的工作方式。
例如,windef.h
“
#ifndef WIN32
#define WIN32
#endif
默认情况下,和/D "WIN32"
被放入Visual Studio C ++项目中。
有关详细信息,请参阅https://stackoverflow.com/a/662543/12711。