-All_load linker झंडा क्या करता है?


123

मैं उद्देश्य-सी कोड को संकलित करते समय कहीं भी -all_load झंडा क्या कर सकता हूं।

मेरे पास Apple में बायनेरिज़ अपलोड करने के कुछ मुद्दे हैं, वे कहते हैं कि मैंने इस ध्वज का उपयोग नहीं किया, लेकिन मेरा कोड इसके बिना भी संकलित है।

क्या कोई मेरी मदद कर सकता है?

धन्यवाद


2
आमतौर पर, एप्लिकेशन को चलाते समय डिवाइस पर होने वाली कोई भी त्रुटि आपको दिखाई देती है। क्या आप कह रहे हैं कि आपने Apple द्वारा समीक्षा के लिए प्रस्तुत करने से पहले वास्तविक हार्डवेयर पर अपने आवेदन का परीक्षण नहीं किया है? यदि हां, तो यह एक बहुत ही बुरा विचार है।
ब्रैड लार्सन

मैंने इसका परीक्षण किया है, हालांकि मेरा "वितरण" कॉन्फ़िगरेशन - ऐप स्टोर प्रोविज़निंग प्रोफाइल वाला - झंडा नहीं था और सभी परीक्षण विकास प्रोफ़ाइल का उपयोग करके किए गए थे, जिसमें झंडा था, इसलिए सब कुछ ठीक लग रहा है, और कब मैंने इसे डिस्ट्रीब्यूशन प्रोफाइल के साथ ऐप स्टोर के लिए संकलित किया था जो झंडा बंद था, और क्योंकि वितरण प्रोफ़ाइल को स्थानीय रूप से स्थापित नहीं किया जा सकता है इसलिए मैं इसकी जांच नहीं कर सका।
गाय एप्रैम

जवाबों:


144

यह संभवतः इस तकनीकी नोट से संबंधित है https://developer.apple.com/library/content/qa/qa1490/_index.html

महत्वपूर्ण: 64-बिट और iPhone OS अनुप्रयोगों के लिए, एक लिंकर बग होता है, जो -ObjC को स्थिर पुस्तकालयों से ऑब्जेक्ट फ़ाइलों को लोड करने से रोकता है जिसमें केवल श्रेणियां और कोई वर्ग नहीं होता है। वर्कअराउंड -all_load या -force_load झंडे का उपयोग करना है। -all_load लिंकर को ऑब्जेक्ट-सी कोड के बिना भी देखे गए प्रत्येक संग्रह से सभी ऑब्जेक्ट फ़ाइलों को लोड करने के लिए मजबूर करता है। -force_load Xcode 3.2 और बाद में उपलब्ध है। यह पुरालेख लोडिंग के बारीक अनाज नियंत्रण की अनुमति देता है। प्रत्येक -force_load विकल्प को संग्रह के लिए एक पथ द्वारा अनुसरण किया जाना चाहिए, और उस संग्रह में प्रत्येक ऑब्जेक्ट फ़ाइल लोड की जाएगी।


3
हां, यह मुख्य रूप से iPhone के लिए स्थैतिक पुस्तकालयों के साथ आता है। यदि उन्हें इस लिंकर ध्वज के बिना संकलित किया जाता है, तो श्रेणियां निर्मित बाइनरी में शामिल नहीं होती हैं और इन स्थैतिक पुस्तकालयों का उपयोग करने वाले किसी भी अनुप्रयोग में iPhone ओएस हार्डवेयर पर निष्पादित होने पर रनटाइम त्रुटियां होंगी।
ब्रैड लार्सन

1
संकलन समय पर लापता पद्धति की कुछ चेतावनियाँ या त्रुटियाँ नहीं होनी चाहिए?
गाय एप्रैम

18
नहीं, क्योंकि श्रेणियां संकलन-समय पर मौजूद हैं, वे केवल अंतिम बाइनरी में लिंक नहीं किए जा रहे हैं। लेकिन ओब्ज-सी डिस्पैच की गतिशील प्रकृति के कारण, लिंकर कॉलिंग कोड को सीधे लागू करने की विधि से इंगित नहीं करता है, इसलिए यह कभी भी नोटिस नहीं करता है कि यह गायब है। फिर रनटाइम पर, आपको काबूम मिलता है, उसी तरह जैसे कि आप इसे "-परफॉर्मसेलेक्टर:" का उपयोग करके कहते हैं:
सोफिस्टिफंक

14
बस तकनीकी नोट को स्पष्ट करना चाहते हैं: ज्यादातर समय आप चाहते हैं -ObjC लिंकर ध्वज, नहीं -all_load। -all_load की सिफारिश की गई है (मैं दुर्लभ मान सकता हूं) उदाहरण जहां आपके पास एक पुस्तकालय है, जिसमें कोई वर्ग नहीं है, बस श्रेणियां हैं।
क्रिस हिल

3
के अनुसार stackoverflow.com/a/2615407/62 इस XCode 4.2 के रूप में निर्धारित किया गया है, तो आप -all_load या -force_load झंडे और आवश्यकता नहीं है। आपको अभी भी जरूरत है -ObjC
लिरॉन याहदव
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.