簡體   English   中英

MinGW沒有定義WIN32,預處理器指令中的錯誤

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM