2012-01-26 15 views
7

Estoy usando mingw32-make para compilar un proyecto para Windows, que depende de un proyecto llamado libevent2. Sigo recibiendo este error -MinGW no define WIN32, error en las directivas de preprocesador

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

Obviamente un archivo de la API de Linux está tratando de ser incluidos, que no va a funcionar en Windows. Sin embargo, tras una investigación más profunda, encuentro que este archivo solo debe incluirse si WIN32 no está definido.

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

"Su proyecto" ? Asegúrese de que WIN32 está definido. ' 'requiere cygwin, no solo mingw32. – John

+0

@John Disculpe,' un proyecto '. ¿Qué quiere decir con' asegurarse de que WIN32 está definido? '. – liamzebedee

+0

What ve rsion de MinGW estas usando? ¿Cuál es la línea de comando que invoca al compilador? –

Respuesta

9

Debe utilizar _WIN32 y también puede querer comprobar __CYGWIN__

#if defined _WIN32 || defined __CYGWIN__ 
9

¿Seguro que no hay nada undefining WIN32? Mi instalación de MinGW (4.6.1 en este sitio) definitivamente lo define:

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 

Trate de pasar los -E -dM opciones para verificar si su compilador MinGW es (o no es) antes de la definición de la macro WIN32.

Nota que, estrictamente hablando, no WIN32 debe predefinir por el compilador (ya que está en espacio de nombres del usuario) - Sólo _WIN32 debería. WIN32 debe ser configurado por el SDK utilizado y/o por el entorno de compilación: así es como funciona en los compiladores de Microsoft.

Por ejemplo, está la siguiente secuencia en windef.h "

#ifndef WIN32 
#define WIN32 
#endif 

y /D "WIN32" se pone en Visual Studio C++ proyectos por defecto.

Ver https://stackoverflow.com/a/662543/12711 para más detalles.

Cuestiones relacionadas