2012-08-27 22 views
7

मेरे पास थोड़ा सा दुविधा है। मैंने अपनी परियोजना में 2 ढांचे को जोड़ा है और इसलिए यह होता है कि दोनों JSONKit का उपयोग करें। तो जब मैं अपनी परियोजना संकलित करता हूं तो मुझे इन 2 ढांचे के बीच डुप्लिकेट प्रतीकों मिलते हैं।तृतीय पक्ष ढांचे के बीच डुप्लिकेट प्रतीकों से कैसे बचें

मुझे अपनी बिल्ड सेटिंग्स में -ObjC -all_load जोड़ना पड़ा अन्यथा मुझे कुछ श्रेणियों के संकलन के कारण रनटाइम त्रुटियां (क्रैश) मिलेंगी।

कोई भी विचार?

+1

यदि आप स्रोत प्राप्त कर रहे हैं, तो बस इसे संपादित करें ताकि आप JSONKit को स्वयं शामिल कर सकें और इसे फ्रेमवर्क स्रोतों से हटा दें। यदि आपको केवल स्थिर पुस्तकालय मिल रहे हैं, तो रखरखावकर्ताओं को लिखें और उन्हें जेएसओएनकिट के खिलाफ कमजोर लिंक के बारे में बताएं और इसे अपने ढांचे का उपयोग करने की आवश्यकता बनाएं (यही वही है जो उन्हें वैसे भी करना चाहिए)। –

+1

हाँ यह एक बड़ी समस्या है। मैंने पुस्तकालयों को देखा है जो जानबूझकर अन्य आवश्यक तृतीय पक्ष को खो रहे हैं क्योंकि उन्हें पता है कि यह संघर्ष करेगा। यदि आप -ObjC -all_load का उपयोग कर रहे हैं, तो मुझे लगता है कि आप वास्तविक .a फ़ाइलों का उपयोग कर रहे हैं। हो सकता है कि आप लेखकों से उस पुस्तकालय के बिना संस्करण के लिए अनुरोध कर सकें। – rooster117

+0

हाँ मुझे डर था कि यह संकल्प होगा। मेरी इच्छा है कि समस्याओं के इस सेट से बचना आसान हो। – MrShoot

उत्तर

2

जब आप स्थैतिक-पुस्तकालय को लिंक करते हैं, तो लिंकर आपके अंतिम बाइनरी में सभी प्रतीकों को एम्बेड करेगा। (यही कारण है कि इसे स्थिर नाम दिया गया है।) असल में विशिष्ट प्रतीकों को तोड़ने का कोई अच्छा तरीका नहीं है, क्योंकि स्रोत प्रतीकों और नए एम्बेडेड प्रतीकों के बीच कोई अंतर नहीं है। यहां तक ​​कि आप डुप्लिकेट प्रतीकों को भी बंद कर सकते हैं, कोई भी यह सुनिश्चित नहीं कर सकता कि डुप्लिकेट प्रतीक समान संस्करण हैं। यदि एक लाइब्रेरी JSONKit लाइब्रेरी के संशोधित संस्करण का उपयोग करती है, तो जब आप इसे अन्य संस्करण के साथ बदलते हैं तो यह तोड़ा जाएगा।

डुप्लीकेट प्रतीकों के बिना .a फ़ाइल प्राप्त करने या स्रोत प्राप्त करने और उन्हें स्वयं संकलित करने का एकमात्र तरीका प्राप्त हो रहा है। यदि lib निर्माता बेवकूफ नहीं हैं, तो उन्हें बिना एम्बेडेड प्रतीकों के पुस्तकालय के कुछ संस्करण की पेशकश करनी चाहिए। अगर ऐसी कोई बात नहीं है, तो मैं दृढ़ता से उस lib का उपयोग न करने की सलाह देता हूं। क्योंकि इसमें प्रतीक संघर्ष की कोई चिंता नहीं है जिसका अर्थ असली नौसिखिया द्वारा किया गया है जिसका अर्थ है कि यह समस्या से भरा है।

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