[英]MinGW not defining WIN32, error in preprocessor directives
我正在使用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
你應該使用_WIN32
,也可能想檢查__CYGWIN__
#if defined _WIN32 || defined __CYGWIN__
你確定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 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.