2011-03-09 11 views
10

में lib ए और बी भी शामिल करें I ऐप विकास के लिए पुन: प्रयोज्य पुस्तकालयों का एक सेट बनाने का प्रयास कर रहा हूं, लेकिन मैं एक में भागना शुरू कर रहा हूं मुसीबत।डुप्लिकेट प्रतीक: स्थैतिक lib B में स्थिर lib ए को शामिल करें, XCode Project

मेरी स्थिर libs में से एक सामान्य उपयोग विधियों का एक सेट है (उद्देश्य-सी फाउंडेशन कक्षाओं पर श्रेणियां उनकी उपयोगिता में सुधार करने के लिए) जो मैं प्रत्येक परियोजना में उपयोग करने के लिए उपयोग करता हूं। (हम इसे लिब एक फोन करता हूँ ... यानी XCode प्रोजेक्ट एक libProjectA.a पैदा करता है)

तब मैं अन्य स्थिर libs, चीजें हैं जो गणित के लिए विशेष कोड होते हैं, आदि (हम इसे लिब बी फोन करता हूँ) लिब ए लिब ए के लिए लिंक क्योंकि इसे उस सामान्य कार्यक्षमता का उपयोग करने की आवश्यकता है। (यानी xCode प्रोजेक्ट बी libprrojectA.a के साथ लिंक करता है और libProjectB.a उत्पन्न करता है)

मेरी एक्सकोड प्रोजेक्ट में, मैं लिब ए पर शामिल होना और निर्भर करना चाहता हूं क्योंकि इसमें मेरे सामान्य उपयोग सामग्री हैं जो मैं हर समय उपयोग करता हूं। मैं भी लिब बी पर शामिल होना और निर्भर करना चाहता हूं क्योंकि मुझे उस विशेष गणित की कार्यक्षमता की आवश्यकता है। (यानी मेरा ऐप प्रोजेक्ट libProjectA.a और libProjectB.a से लिंक करना चाहता है)

हालांकि, जब मैं अपने एक्सकोड प्रोजेक्ट को बनाने का प्रयास करता हूं तो मुझे डुप्लिकेट प्रतीकों के लिए त्रुटियां मिलती हैं, क्योंकि लिब ए में परिभाषित प्रतीक भी परिभाषित किए जाते हैं लिब बी में

ld: duplicate symbol _OBJC_METACLASS_$_Foo in /Users/kenny/xcode_build/Release-iphonesimulator/lib_ApplicationCore.a(Foo.o) and /Users/kenny/xcode_build/Release-iphonesimulator/lib_SpecializedMath.a(Foo.o) 

मैं कैसे इस समस्या को हल कर सकते हैं? मैं अपने ऐप विकास को गति देने के साथ-साथ परीक्षण/परिष्कृत कोड के माध्यम से स्थिरता में वृद्धि के लिए पुन: प्रयोज्य पुस्तकालयों को विकसित करना चाहता हूं। क्या मैं गलत परिप्रेक्ष्य से यह आ रहा हूं? मैं आईओएस के लिए विकास कर रहा हूं इसलिए मैं dylibs का उपयोग नहीं कर सकता, वे स्थिर होना चाहिए।

मैं अपने प्रोजेक्ट में इन पुस्तकालयों को कैसे शामिल कर सकता हूं जब वे एक दूसरे पर परस्पर निर्भर होते हैं और डुप्लिकेट प्रतीकों से बचते हैं?

+2

परियोजना बी के लिए लिब ए के खिलाफ लिंक करने के लिए यह समझ में नहीं आता है कि यह आपके लिए कितना अजीब लगता है। यदि वे गतिशील पुस्तकालय थे तो यह ठीक है लेकिन वे स्थिर पुस्तकालय हैं यानी ऑब्जेक्ट फ़ाइलों के अभिलेखागार, और कुछ भी नहीं। lib ए के खिलाफ दिया गया "लिंक" करके आप lib एक से सभी वस्तुओं लेते हैं और उन्हें आप से क्या मतलब है परियोजना बी – Troubadour

उत्तर

7

हालांकि लिब बी लिब ए पर निर्भर करता है, लेकिन आप वास्तव में सभी ऑब्जेक्ट्स को ए से बी में नहीं रखना चाहते हैं, जो आपने इसे देखा है। मुझे यकीन नहीं है कि आपने इसे कैसे प्रबंधित किया लेकिन मैं कल्पना करूंगा कि जब आपने लिब बी के साथ जुड़ा हुआ लिब बी बनाया था? यदि हां, तो सिर्फ लिब एक निर्माण लाइन से लिब बी के लिए छोड़ देते हैं लिब एक से सभी प्रतीकों लिब बी

स्टेटिक पुस्तकालयों में अपरिभाषित हो रहे हैं वस्तु फ़ाइलों का सिर्फ अभिलेखागार होती हैं तो दो पूरी तरह से अलग होना चाहिए। जब आपको लिब बी के खिलाफ लिंक करने की आवश्यकता होती है तो बस लिब ए को भी निर्दिष्ट करें।

+0

से सभी वस्तुओं को जोड़ने के लिए archiver निर्देश देते रहे हैं "बी में एक से सभी वस्तुओं डाल?" मैं बिल्कुल कोड कॉपी नहीं कर रहा हूं। मेरे XCode प्रोजेक्ट कि lib बी बनाता है यह lib ए के साथ फिर लिब ए और बी लिब मैं के साथ मेरी ऐप्स लिंक मेरे सवाल का अद्यतन स्पष्ट करने के लिए कैसे अंतर-परियोजनाओं से जुड़े हुए हैं के लिए मेरे XCode प्रोजेक्ट को जोड़ता है। –

+1

lib एक साथ lib बी लिंक करके, आप प्रभावी रूप से सभी वस्तुओं है कि lib एक में संग्रहित हैं लेते हैं और उन्हें lib बी में डाल क्या आप के साथ खत्म हो तो वास्तव में "lib ए और बी" है। जब lib बी संग्रह के निर्माण lib ए के खिलाफ लिंक न करें। – Troubadour

+0

ओह! * Facepalm * मैंने सोचा था कि मेरे ऐप परियोजना सीधे एक के रूप में अच्छी लिब से जोड़ने के लिए किया था, लेकिन मुझे लगता है मैं सिर्फ इतना पता है, जहां हैडर फ़ाइलें हैं एप्लिकेशन परियोजना की जरूरत है। धन्यवाद!वह खूबसूरती से काम किया। –

1

इस धागे ने कमांडलाइन टूल का उपयोग करके डुप्लिकेट को हटाने पर चर्चा की।

How to handle duplicate symbol error from 3rd party libraries?

वे .a फ़ाइलों के अंदर ओ फ़ाइलें निकाली और डुप्लिकेट उसके बाद फिर से संयुक्त हटा दिया।

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