2012-01-26 8 views
7

मैं विंडोज़ को एक प्रोजेक्ट संकलित करने के लिए mingw32-make का उपयोग कर रहा हूं, जो libevent2 नामक प्रोजेक्ट पर निर्भर करता है।MinGW WIN32 को परिभाषित नहीं करता है, प्रीप्रोसेसर निर्देशों में त्रुटि

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

जाहिर लिनक्स एपीआई से एक फ़ाइल कोशिश कर रहा है शामिल करने के लिए है, जो विंडोज पर काम नहीं करेगा - मैं यह संदेश मिल रहा रखने के लिए। आगे की जांच के बाद मुझे लगता है कि यह फ़ाइल केवल तभी शामिल की जानी चाहिए जब WIN32 परिभाषित नहीं किया गया है।

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

" आपका परियोजना " ? सुनिश्चित करें कि WIN32 परिभाषित किया गया है। '' को सिग्विन की आवश्यकता है, न केवल mingw32। – John

+0

@ जॉन क्षमा करें, 'एक प्रोजेक्ट'। आपका क्या मतलब है 'WIN32 परिभाषित किया गया है?' – liamzebedee

+0

क्या क्या आप MinGW का rsion उपयोग कर रहे हैं? कंपाइलर का आह्वान करने वाली कमांड लाइन क्या है? –

उत्तर

9

आप _WIN32 का उपयोग करना चाहिए और यह भी के लिए __CYGWIN__

#if defined _WIN32 || defined __CYGWIN__ 
9

देखना चाहें क्या आपको यकीन है कुछ भी नहीं अपरिभाषित 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 

पूर्व परिभाषित करने WIN32 मैक्रो अगर आपके MinGW संकलक है (या नहीं है) को सत्यापित करने के -E -dM विकल्पों गुजर कोशिश करो।

ध्यान दें कि कडाई के WIN32 चाहिए नहीं संकलक द्वारा पूर्वनिर्धारित किया (क्योंकि यह उपयोगकर्ता के नाम स्थान में है) - केवल _WIN32 चाहिए। WIN32 एसडीके द्वारा इस्तेमाल किया जाना चाहिए और/या निर्माण पर्यावरण द्वारा सेट किया जाना चाहिए - यह माइक्रोसॉफ्ट के कंपाइलर्स में काम करता है।

उदाहरण के लिए, वहाँ windef.h में निम्न क्रम है "

#ifndef WIN32 
#define WIN32 
#endif 

और /D "WIN32" दृश्य स्टूडियो सी ++ डिफ़ॉल्ट रूप से परियोजनाओं में डाल दिया है।

अधिक जानकारी के लिए https://stackoverflow.com/a/662543/12711 देखें।

संबंधित मुद्दे