MinGW没有定义WIN32,预处理器指令中的错误

lia*_*dee 9 c mingw c-preprocessor

我正在使用mingw32-make将项目编译到Windows,这依赖于一个名为libevent2的项目.我一直收到这个错误 -

util.h:69:25: fatal error: sys/socket.h: No such file or directory
Run Code Online (Sandbox Code Playgroud)

显然,试图包含来自Linux API的文件,这在Windows上不起作用.经过进一步调查,我发现只有在未定义WIN32时才应包含此文件.

#ifdef WIN32
 #include <winsock2.h>
#else
 #include <sys/socket.h>
#endif
Run Code Online (Sandbox Code Playgroud)

Joe*_*Joe 13

你应该使用_WIN32也可能想要检查__CYGWIN__

#if defined _WIN32 || defined __CYGWIN__
Run Code Online (Sandbox Code Playgroud)


Mic*_*urr 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
Run Code Online (Sandbox Code Playgroud)

尝试传递-E -dM选项以验证您的MinGW编译器是否(或不是)预定义WIN32宏.

需要注意的是严格来说,WIN32应该被编译器预定义的(因为它是在用户的命名空间) -只_WIN32应该. WIN32应该由正在使用的SDK和/或构建环境设置 - 这就是它在Microsoft的编译器中的工作方式.

例如,windef.h""中有以下顺序

#ifndef WIN32
#define WIN32
#endif
Run Code Online (Sandbox Code Playgroud)

/D "WIN32"默认放入Visual Studio C++项目中.

有关详细信息,请参阅/sf/answers/46378041/.