2012-01-26 8 views
7

Sto usando mingw32-make per compilare un progetto in Windows, che dipende da un progetto chiamato libevent2. Continuo a ricevere questo errore -MinGW non definisce WIN32, errore nelle direttive del preprocessore

util.h:69:25: fatal error: sys/socket.h: No such file or directory 

Ovviamente un file dalla API di Linux sta cercando di essere compreso, che non funzionerà su Windows. Dopo ulteriori indagini, tuttavia, ritengo che questo file debba essere incluso solo se WIN32 non è definito.

#ifdef WIN32 
#include <winsock2.h> 
#else 
#include <sys/socket.h> 
#endif 
+0

"Il progetto" ? Verificare che WIN32 sia definito. ' 'richiede cygwin, non solo mingw32 – John

+0

@John Spiacenti,' un progetto '. Cosa intendi per' garantire che WIN32 sia definito? '. – liamzebedee

+0

rsione di MinGW stai usando? Qual è la riga di comando che richiama il compilatore? –

risposta

9

Si dovrebbe usare _WIN32 e consiglia inoltre di verificare la presenza di __CYGWIN__

#if defined _WIN32 || defined __CYGWIN__ 
9

Sei sicuro non c'è niente indefiniti WIN32? La mia installazione di MinGW (4.6.1 in questo sito) definisce sicuramente esso:

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 

Prova a passare le opzioni -E -dM per verificare se il compilatore MinGW è (o non è) pre-definizione del WIN32 macro.

Si noti che a rigor di termini, WIN32 dovrebbe non essere predefiniti dal compilatore (dal momento che è in spazio dei nomi dell'utente) - solo _WIN32 dovrebbe. WIN32 deve essere impostato dall'SDK utilizzato e/o dall'ambiente di compilazione, è così che funziona nei compilatori Microsoft.

Ad esempio, c'è la seguente sequenza in windef.h "

#ifndef WIN32 
#define WIN32 
#endif 

e /D "WIN32" viene messo in progetti per impostazione predefinita Visual Studio C++.

Vedere https://stackoverflow.com/a/662543/12711 per maggiori dettagli.

Problemi correlati