जब मैं अपना Xcode प्रोजेक्ट चलाने की कोशिश करता हूं तो यह एक त्रुटि के साथ विफल होता है जिसमें कहा गया है कि मेरे पास डुप्लिकेट प्रतीक हैं। मैंने ऑनलाइन देखा जहां ये डुप्लिकेट मिलते हैं, लेकिन कोई भाग्य नहीं है:
इसे ठीक करने का कोई तरीका?
जब मैं अपना Xcode प्रोजेक्ट चलाने की कोशिश करता हूं तो यह एक त्रुटि के साथ विफल होता है जिसमें कहा गया है कि मेरे पास डुप्लिकेट प्रतीक हैं। मैंने ऑनलाइन देखा जहां ये डुप्लिकेट मिलते हैं, लेकिन कोई भाग्य नहीं है:
इसे ठीक करने का कोई तरीका?
जवाबों:
मेरे लिए यह NO के लिए "नो कॉमन ब्लॉक्स" कंपाइलर सेटिंग को स्विच करने में मदद करता है: यह बहुत समझ में आता है, सेटिंग यहाँ बताई गई है: GCC_NO_COMMON_BLOCKS किसके लिए उपयोग किया जाता है?
Xcode 8 का उपयोग करते हुए, "अनुशंसित सेटिंग्स के लिए प्रोजेक्ट अपडेट करें" विकल्प ने मेरी परियोजना के लिए 'नो कॉमन ब्लॉक' चालू कर दिया।
इसे बंद करने से सब कुछ ठीक हो जाता है।
मैंने फली को अपग्रेड करते समय अपनी फली को गड़बड़ कर दिया है और मैंने फली को हटाने और आर्किटेक्चर arm64 के लिए डुप्लिकेट प्रतीकों के साथ समस्या को हल करने में कामयाबी हासिल की है।
pod deintegrate
pod install
एक और उपाय है:
प्रोजेक्ट का चयन करें -> टारगेट -> बिल्ड फेज -> कम्पाइल सोर्स -> उस फाइल को सर्च करें जिसका उल्लेख 3 लास्ट एरर लाइन (आपके केस में BFAppLinkReturnToRefererView.o ) में किया गया है।
फिर आपको सर्च रिजल्ट में 1 या 2 फाइल दिखाई देगी।
उनमें से एक निकालें और फिर से संकलित करें । इसे अब फिर से शुरू करना चाहिए क्योंकि निर्माण के लिए केवल एक फ़ाइल बची है और कोई अधिक संघर्ष नहीं है।
यदि वह फ़ाइल काम नहीं करती है, तो शायद उसमें त्रुटियां हैं और आपको उन सभी को हटा देना चाहिए और फिर पुन: स्थापित करना चाहिए। यह फिर से काम करना चाहिए।
Xcode 8 में अपग्रेड करने पर, मुझे अनुशंसित सेटिंग्स में अपग्रेड करने का संदेश मिला। मैंने स्वीकार किया और सब कुछ अपडेट किया गया। मुझे संकलन का समय मिलना शुरू हुआ:
XXXX के लिए डुप्लिकेट प्रतीक XXXX के लिए डुप्लिकेट प्रतीक XXXX के लिए डुप्लिकेट प्रतीक
कुल 143 त्रुटियां। टारगेट पर गए-> सेटिंग बनाएँ -> नो कॉमन ब्लॉक्स -> इसे NO पर सेट करें। इससे समस्या हल हो गई। मुद्दा यह था कि एकीकृत परियोजनाओं में सामान्य रूप से कोड ब्लॉक थे और इसलिए इसे संकलित करने में सक्षम नहीं था। स्पष्टीकरण यहाँ पाया जा सकता है ।
यह त्रुटि तब होती है जब लिंकर obj फ़ाइलों को लिंक करने का प्रयास कर रहा होता है। इस त्रुटि के लिए मैं सोच सकता था कि कुछ कारण हैं:
डुप्लिकेट किए गए फ़ंक्शन / क्लास को प्रोजेक्ट में दो अलग-अलग स्थानों / फाइलों में परिभाषित किया गया है और उनमें से केवल एक को बिल्ड कमांड के किसी भी रूपांतर के लिए संकलित करना चाहिए था। लेकिन किसी तरह वे दोनों फाइलें आपके प्रोजेक्ट में संकलित हो गईं। इसलिए आपको अपने if-else की स्थिति या अन्य निर्भरता की जांच करने की आवश्यकता है जो आपके विशेष बिल्ड कमांड के लिए आवश्यक फ़ाइलों को संकलित करने और हटाने के लिए आवश्यक फ़ाइलों की सूची में src फाइलें जोड़ता है।
डुप्लिकेट किए गए फ़ंक्शन / क्लास को प्रोजेक्ट में दो अलग-अलग स्थानों / फ़ाइलों पर गलती से परिभाषित किया गया है। गलत परिभाषा को हटा दें।
अपने OBJ निर्देशिका को फिर से बनाने से पहले, अपने पिछले बिल्ड से कुछ पुरानी obj फाइलें हो सकती हैं जो इस संघर्ष का कारण हो सकती हैं।
पीएस मैं कोई विशेषज्ञ नहीं हूं, लेकिन इस तरह से मैंने इस समस्या का हल किया जब मैंने इसका सामना किया। :)
यदि आप Xcode 7 या 8 पर जा रहे हैं और एक बहुत पुरानी परियोजना खोल रहे हैं, तो मुझे इस समस्या का सामना करना पड़ा है:
में SomeConstFile.h
NSString * const kAConstant;
में SomeConstFile.m
NSString *const kAConstant = @"a constant";
कंपाइलर के पहले के संस्करणों ने मान लिया था कि हेडर फ़ाइल में परिभाषा कुछ बाहरी थी और SomeConstFile.h सहित सभी जगह ठीक थी।
अब आपको इन जातियों को स्पष्ट रूप से बाहरी घोषित करने की आवश्यकता है:
में SomeConstFile.h
extern NSString * const kAConstant;
खैर, कुछ समय जब एसडीके जैसे एफबी या लाइब्रेरीज़ जैसे कि वुफोरिया या GoogleAnalytics का उपयोग करते हैं, तो नमूना परियोजनाओं को जोड़ने से समस्या हो सकती है कि वे पहले से ही फ्रेमवर्क और इसी तरह शामिल हैं, इसलिए आपको यह सुनिश्चित करना होगा कि आप पहले से ही शामिल किए गए प्रतीकों को मैन्युअल रूप से न दोहराएं। नमूनों में शामिल
मेरे लिए, इस मुद्दे को कब्जे के निर्माण की शैली थी, जो इस iOS8 तक ठीक काम करता था .. मेरे पास कुछ लाइनें थीं:
int const kView_LayoutCount = 3;
मेरी .h फ़ाइल में। एक बार कॉमन ब्लॉक को NO में सेट करने पर 636 लिंकर फाइल्स की तरह छह लाइनें। (14k + यदि हाँ)। मूल्य घोषणा और संकलन के .h के अलग होने के बाद लाइनों को स्थानांतरित कर दिया गया।
आशा है कि यह दूसरों की मदद करता है!
मेरे मामले में कारण बहुत मूर्ख था:
मेरे पास एक Constant.h फ़ाइल थी जहाँ मुझे मैक्रोज़ परिभाषित किया गया था। मैंने वहां NSString करने की सोची। और यह किया:
NSString const *kGreenColor = @"#00C34E";
इससे आर्किटेक्चर arm64 के लिए डुप्लिकेट सिंबल्स की समस्या पैदा हो गई और लिंकर कमांड एक्जिट कोड से फेल हो गया। 1. नस्टिंग एनएसएसट्रिंग लाइन को हटाना मेरे लिए काम कर गया।
अपनी शामिल फ़ाइल की जाँच करें, मेरे पास यह मुद्दा था क्योंकि मैंने "फ़ाइलनाम.एच" के बजाय गलती से "फ़ाइलनाम।" किया था, स्वतः पूर्ण (टैब) ने "एम" नहीं "एच" डाल दिया।
त्रुटियों से, यह किसी भी वर्ग को कई बार दिखाई देगा। उसे हटा दें और उस कक्षाओं को हटा दें जो यह काम करेगा।
कई बार बनाने AppDelegate.h और .m फ़ाइल बनाने वाला हूँ। तो यह त्रुटि उत्पन्न होगी। सामान्य रूप से उन कक्षाओं को ढूंढें और हटा दें जो मेरे लिए ठीक काम कर रहे हैं।
इस समस्या को हल करने के लिए बनाएँ चरणों में जाएं और (फ़ोकस-फ़ोकस के रूप में फिर से निर्माण) (फ़ेसबुकएसकेके, यूनिटीस) और डुप्लिकेट फ़ाइल के बारे में खोजें।
मेरे लिए, मैंने sampleMethod
ViewController_A में एक विधि बनाई और ViewController_B में भी यही विधि बनाई, इससे मुझे यह त्रुटि हुई, फिर मैंने विधि का नाम ViewController_B में बदल दिया secondSampleMethod
। इसने त्रुटि को ठीक कर दिया।
कोड को कम करने के लिए एक अच्छी सुविधा की तरह लगता है और कई स्थानों पर एक ही कोड की नकल नहीं करता है।
मैंने नो से कॉमन ब्लॉक्स को हां से नहीं बदलने की कोशिश की और फिर हां से नहीं की टेस्टेबिलिटी को सक्षम किया। मैंने डुप्लिकेट फ़ाइलों की जाँच भी चरणों के निर्माण में की, लेकिन कोई डुप्लिकेट फ़ाइलें नहीं हैं।
मुझे यह मुद्दा इसलिए मिला क्योंकि मैं एक चर के लिए अपने तरीके से किसी चर को परिभाषित कर रहा था, फिर किसी अन्य .m फ़ाइल में मैं किसी अन्य चर को विधि के बाहर उसी नाम से परिभाषित कर रहा था। यह एक वैश्विक चर नाम डुप्लिकेट समस्या पैदा कर रहा था।
मैं इस त्रुटि को हल करने में सक्षम था, जिसमें कहा गया था "आर्किटेक्चर आर्मव 7 के लिए 158 डुप्लिकेट प्रतीक, आर्किटेक्चर आर्म 64 के लिए 158 डुप्लिकेट प्रतीक" --- यदि यह आपको भी मिल रहा है, तो इसका मतलब है कि आप एक फ़ाइल संकलित करने की कोशिश कर रहे हैं जो आयात कर रहा है या C ++ कोड या फ़ाइलों के संदर्भ में एक फ्रेमवर्क या स्थिर लाइब्रेरी विरासत में मिली। इसे संभालने का एक आसान तरीका यह होगा कि अपने .m फ़ाइल के एक्सटेंशन को .mm में बदल दें। यदि आप उद्देश्य सी का उपयोग कर रहे हैं, तो यह कैसे नियंत्रित किया जाता है, हालांकि स्विफ्ट पर यकीन नहीं है।
अपनी बिल्ड सेटिंग्स में भी - आप "अन्य लिंकर झंडे" को -lc ++ अपडेट कर सकते हैं
Plz सेटिंग बदलना।
चरण 1: TARGETS पर जाएं -> बिल्ड सेटिंग -> कोई सामान्य ब्लॉक नहीं -> नहीं
चरण 2: TARGETS पर जाएं -> सेटिंग बनाएँ -> परीक्षण क्षमता सक्षम करें -> नहीं