2012-01-26 24 views
7

Bir projeyi Windows'a derlemek için mingw32-make kullanıyorum, bu da libevent2 adlı bir projeye bağlı. MinGW, WIN32'yi tanımlamıyor, önişlemci yönergeleriyle ilgili hata

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

Açıkçası Linux API bir dosya çalışıyor

dahil edilecek, Windows üzerinde çalışmaz - Ben bu hatayı alıyorum. Daha fazla araştırmayla birlikte, bu dosyanın sadece WIN32 tanımlanmamışsa eklenmesini sağladım.

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

"Projeniz" WIN32'nin tanımlandığından emin olun. ' 'sadece mingw32'yi değil, cygwin'i gerektirir. – John

+0

@John Üzgünüz,' bir proje '.WIN32'nin tanımlandığından emin olmak ne demektir? – liamzebedee

+0

Ne ve MinGW rsion kullanıyor musunuz? Derleyiciyi çağırmak için komut satırı nedir? –

cevap

9

Sen hiçbir şey undefining WIN32 var Emin misiniz _WIN32 kullanmalı ve ayrıca __CYGWIN__

#if defined _WIN32 || defined __CYGWIN__ 
9

için kontrol etmek isteyebilirsiniz? MinGW Benim kurulum (bu sitede 4.6.1) kesinlikle tanımlar:

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 

sizin MinGW derleyici (veya değil) eğer WIN32 makro öncesi tanımlayan doğrulamak için -E -dM seçenekleri geçirerek deneyin. açık konuşmak gerekirse

Not WIN32 gerektiği (Bu kullanıcının ad alanında olduğundan) değil derleyici tarafından önceden tanımlanmış olan - sadece _WIN32 olmalıdır. WIN32, kullanılan SDK tarafından ve/veya oluşturma ortamı tarafından ayarlanmalıdır - Microsoft'un derleyicilerinde çalıştığı yoldur. Örneğin

, windef.h aşağıdaki sekans var "diyor Visual Studio C++ varsayılan olarak projelerde konur

#ifndef WIN32 
#define WIN32 
#endif 

ve /D "WIN32".

fazla ayrıntı için https://stackoverflow.com/a/662543/12711 bakınız.