2015-01-16 8 views
5

मैं एक मिश्रित सी और सी ++ कमांड लाइन प्रोग्राम बनाए रखता हूं जिसे लिनक्स, विंडोज और ओएस एक्स पर चलाने की आवश्यकता है। मैंने हाल ही में योसामेट और मेरे ओएस एक्स में अपग्रेड किया है। निर्माण अब असफल रहा है। त्रुटि है:ओएस एक्स योसेमेट कोर हेडर में गैर-जीसीसी संगत कोड से निपटने के लिए कैसे करें

/usr/include/dispatch/object.h:143:15: error: expected identifier or '(' before '^' token 

Other folks have run into this bug

विफल होने वाले कोड की रेखा एक टाइपिफ़ है जो '^' का उपयोग करती है जो non-standard extension providing support for closures है।

अंतर्निहित समस्या यह प्रतीत होती है कि कुछ ऐप्पल मानक शीर्षकों को क्लैंग विशिष्ट एक्सटेंशन की आवश्यकता होती है। दुर्भाग्यवश हमारे कार्यक्रम में निर्भरता का एक बहुत गहरा सेट है, जिनमें से कुछ क्लैंग के तहत संकलित नहीं होंगे। हम मैकपॉर्ट्स के माध्यम से स्थापित जीसीसी कंपाइलर्स का उपयोग कर रहे हैं। मेरे पास अभी कामकाज है: object.h हेडर में लाइन को जीसीसी संगत होने के लिए बदलना। हालांकि, /usr/include के तहत फ़ाइलों को शामिल करने के लिए हैकिंग मुझे परेशानी के लिए पूछने की तरह लगता है।

क्या कोई ओएस एक्स/क्लैंग गुरु इस समस्या से निपटने के अधिक टिकाऊ तरीकों का सुझाव दे सकता है? क्या यह ओएस एक्स पर जीसीसी की भविष्य की उपयोगीता को सीमित करता है?

dispatch/object.h में परिवर्तन

typedef void (^dispatch_block_t)(void);

#ifdef __clang__ 
typedef void (^dispatch_block_t)(void); 
#else 
typedef void* dispatch_block_t; 
#endif 

करने और Availability.h परिवर्तन में:

+2

बजना केवल संकलक ओएस एक्स जीसीसी के लिए एप्पल द्वारा समर्थित नहीं रहेगी तथा असमर्थित है। मैं कामकाजी रखने की उम्मीद नहीं करता। –

+0

मुझे डर है @VariableLengthCoder शायद अधिकतर सही है। –

+0

यह मुझे दुख देता है। ओह ठीक है, हम अभी भी हिम तेंदुए के तहत निर्माण करने में सक्षम हैं। –

उत्तर

13

बस भावी आगंतुकों के लिए, निम्नलिखित सबसे हाल ही में एक जीसीसी संस्करण के साथ काम हेडर मिलना चाहिए

#elif defined(__MAC_OS_X_VERSION_MIN_REQUIRED)

को

#elif defined(__MAC_OS_X_VERSION_MIN_REQUIRED) && defined(__clang__)

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