मैं एक मिश्रित सी और सी ++ कमांड लाइन प्रोग्राम बनाए रखता हूं जिसे लिनक्स, विंडोज और ओएस एक्स पर चलाने की आवश्यकता है। मैंने हाल ही में योसामेट और मेरे ओएस एक्स में अपग्रेड किया है। निर्माण अब असफल रहा है। त्रुटि है:ओएस एक्स योसेमेट कोर हेडर में गैर-जीसीसी संगत कोड से निपटने के लिए कैसे करें
/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
परिवर्तन में:
बजना केवल संकलक ओएस एक्स जीसीसी के लिए एप्पल द्वारा समर्थित नहीं रहेगी तथा असमर्थित है। मैं कामकाजी रखने की उम्मीद नहीं करता। –
मुझे डर है @VariableLengthCoder शायद अधिकतर सही है। –
यह मुझे दुख देता है। ओह ठीक है, हम अभी भी हिम तेंदुए के तहत निर्माण करने में सक्षम हैं। –