जब आप स्थैतिक-पुस्तकालय को लिंक करते हैं, तो लिंकर आपके अंतिम बाइनरी में सभी प्रतीकों को एम्बेड करेगा। (यही कारण है कि इसे स्थिर नाम दिया गया है।) असल में विशिष्ट प्रतीकों को तोड़ने का कोई अच्छा तरीका नहीं है, क्योंकि स्रोत प्रतीकों और नए एम्बेडेड प्रतीकों के बीच कोई अंतर नहीं है। यहां तक कि आप डुप्लिकेट प्रतीकों को भी बंद कर सकते हैं, कोई भी यह सुनिश्चित नहीं कर सकता कि डुप्लिकेट प्रतीक समान संस्करण हैं। यदि एक लाइब्रेरी JSONKit
लाइब्रेरी के संशोधित संस्करण का उपयोग करती है, तो जब आप इसे अन्य संस्करण के साथ बदलते हैं तो यह तोड़ा जाएगा।
डुप्लीकेट प्रतीकों के बिना .a
फ़ाइल प्राप्त करने या स्रोत प्राप्त करने और उन्हें स्वयं संकलित करने का एकमात्र तरीका प्राप्त हो रहा है। यदि lib निर्माता बेवकूफ नहीं हैं, तो उन्हें बिना एम्बेडेड प्रतीकों के पुस्तकालय के कुछ संस्करण की पेशकश करनी चाहिए। अगर ऐसी कोई बात नहीं है, तो मैं दृढ़ता से उस lib का उपयोग न करने की सलाह देता हूं। क्योंकि इसमें प्रतीक संघर्ष की कोई चिंता नहीं है जिसका अर्थ असली नौसिखिया द्वारा किया गया है जिसका अर्थ है कि यह समस्या से भरा है।
यदि आप स्रोत प्राप्त कर रहे हैं, तो बस इसे संपादित करें ताकि आप JSONKit को स्वयं शामिल कर सकें और इसे फ्रेमवर्क स्रोतों से हटा दें। यदि आपको केवल स्थिर पुस्तकालय मिल रहे हैं, तो रखरखावकर्ताओं को लिखें और उन्हें जेएसओएनकिट के खिलाफ कमजोर लिंक के बारे में बताएं और इसे अपने ढांचे का उपयोग करने की आवश्यकता बनाएं (यही वही है जो उन्हें वैसे भी करना चाहिए)। –
हाँ यह एक बड़ी समस्या है। मैंने पुस्तकालयों को देखा है जो जानबूझकर अन्य आवश्यक तृतीय पक्ष को खो रहे हैं क्योंकि उन्हें पता है कि यह संघर्ष करेगा। यदि आप -ObjC -all_load का उपयोग कर रहे हैं, तो मुझे लगता है कि आप वास्तविक .a फ़ाइलों का उपयोग कर रहे हैं। हो सकता है कि आप लेखकों से उस पुस्तकालय के बिना संस्करण के लिए अनुरोध कर सकें। – rooster117
हाँ मुझे डर था कि यह संकल्प होगा। मेरी इच्छा है कि समस्याओं के इस सेट से बचना आसान हो। – MrShoot