2010-07-28 11 views
25

मुझे डबल बाइंड का सामना करना पड़ रहा है, एक तरफ तीसरे पक्ष के स्थिर पुस्तकालयों में से एक के लिए, मेरा आईफोन एप्लीकेशन उपयोग करता है, लिंकर फ्लैग -all_load एप्लिकेशन प्रोजेक्ट- या लक्ष्य सेटिंग्स में सेट किया जाना है, अन्यथा ऐप रनटाइम पर क्रैश हो जाता है, कुछ प्रतीकों को नहीं ढूंढता, जिसे आंतरिक रूप से lib से कहा जाता है, दूसरी तरफ दूसरी पार्टी के लिए स्थिर lib -all_load को एप्लिकेशन स्तर पर सेट नहीं किया जाना चाहिए, या ऐप "डुप्लिकेट प्रतीकों" -लिंकर त्रुटि के लिए धन्यवाद नहीं बनाएगा। इस समस्या को हल करने के लिए अब मैं load_all के force_load इंस्टेंट का उपयोग करना चाहता हूं, क्योंकि यह प्रलेखन के कारण यह all_load जैसा ही है, लेकिन केवल सभी libs के बजाय पास किए गए पथ या lib-file के लिए। force_load के साथ समस्या यह है कि, मेरे पास कोई सुराग नहीं है, पथ या फ़ाइल को पैरामीटर के रूप में कैसे पास किया जाए, जब इसे xcode प्रोजेक्ट- या लक्ष्य-सेटिंग्स के माध्यम से पास किया जाए। मेरे मन में आने वाली सभी वाक्यविन्यास-संभावनाएं या तो एक्सकोड में पिछले एक पैरामीटर की बजाय अपने दूसरे लिंकर ध्वज को सोचती हैं, या लिंकर सिंटैक्स से संबंधित त्रुटियों को फेंक रहा है या ध्वज सेट नहीं होने की तुलना में बस कुछ भी नहीं करता है। मैंने एक टेक्स्ट-एडिटर में मैन्युअल रूप से सही कमांड लाइन सिंटैक्स में संपादित करने के लिए .pbxproj-file भी खोला, लेकिन जब एक्सकोड के साथ प्रोजेक्ट को फिर से लोड किया जाता है, तो यह पैरामीटर को अलग-अलग ध्वज के रूप में force_load में पैरामीटर को समझने में सिंटैक्स को बदल देता है।एक्सकोड प्रोजेक्ट-/आईफोन पर लिंकर फ्लैग फोर्स_लोड के लिए लक्ष्य-सेटिंग्स-सिंटैक्स

किसी को भी इस मुद्दे पर कोई विचार है?

Thx, कैसरलुडी।

+0

किसी भी व्यक्ति के लिए बाउंटी जो दिखा सकता है कि काम करने के लिए force_load कैसे प्राप्त करें। असल में, मेरे प्रोजेक्ट में कुछ पुस्तकालयों को all_load से जोड़ा जाना चाहिए; दूसरों को इसके बिना जुड़ा होना चाहिए। –

उत्तर

18

मैंने अभी यह कोशिश की। मैंने अपने आईफोन प्रोजेक्ट में उपयोग के लिए पीसीआरई की एक स्थिर armv6, armv7, और i386 वसा बाइनरी संकलित की है। मेरी परियोजना में आमतौर पर मेरी लाइब्रेरी प्रोजेक्ट में जोड़ दी गई है और यह ठीक से जुड़ा हुआ है। इसलिए मैंने libpcre.a के लिए लक्ष्य सदस्यता बॉक्स को अनचेक किया और पुनर्निर्मित किया। जैसा कि अपेक्षित है, मुझे पिक्चर प्रतीकों के लिए गायब प्रतीक लिंकर त्रुटियों का एक गुच्छा मिलता है। फिर मैंने लक्ष्य सेटिंग्स विंडो खोली और "अन्य लिंकर ध्वज" खंड संपादित किया। मैं कहा:

-force_load lib/pcre/libpcre.a 

lib निर्देशिका मेरी project.xcodeproj फ़ाइल के रूप में एक ही निर्देशिका में है।

यह ठीक से जुड़ा हुआ है, इसलिए मुझे पता है कि force_load कमांड काम करता है (और जब मैं फ़ाइल बनाता है तो इसे बिल्ड ध्वज में जोड़ा जा सकता है)।

उम्मीद है कि मदद करता है।

Update:

मैं also tried adding एक system library को "अन्य Linker Flags" line तरह इतना:

-force_load src/pcre/libpcre.a -force_load ${SDKROOT}/usr/lib/libz.dylib 

That worked too।

+1

हम्मम्म, मेरे पास श्रेणियों के साथ एक पुस्तकालय है।अगर मैं इसे all_load से जोड़ता हूं, तो सबकुछ बढ़िया है। अगर मैं इसे all_load के बिना लिंक करता हूं, तो यह ठीक से लिंक करता है, लेकिन चलाने पर इसे श्रेणी विधियों को कॉल करने का प्रयास करते समय त्रुटियां होती हैं। अगर मैं इसे force_load निर्देशिका से जोड़ता हूं/रिलीज-आईओएस-आंतरिक-iphonesimulator/libraryname.a, मुझे एक डुप्लिकेट प्रतीक त्रुटि मिलती है। मैं जिस संस्करण का निर्माण कर रहा हूं वह डीबग संस्करण है; क्या इसके साथ कुछ करने के लिए कुछ भी हो सकता है? –

+1

force_load कमांड आपकी लाइब्रेरी समेत है। यदि आपके पास डुप्लिकेट प्रतीक त्रुटि है तो शायद आपके पास वास्तव में कहीं भी एक डुप्लिकेट प्रतीक होगा। मुझे यकीन नहीं है कि इससे कोई समस्या होगी लेकिन क्या लाइब्रेरी आपके प्रोजेक्ट के सदस्य के रूप में और force_load के माध्यम से भी शामिल है? शायद यह श्रेणियों के साथ एक अंतर बनाता है। क्या आपके पास अपनी परियोजना में पहले से परिभाषित एक ही नाम के साथ एक श्रेणी विधि है? आप एक्सकोड में बिल्ड परिणाम विंडो को भी देख सकते हैं, 'सभी संदेश दिखाएं' का चयन करें, फिर कमांड लाइन प्राप्त करने के लिए लिंक कमांड को पॉप करें, फिर टर्मिनल में इसके साथ खेलें। – par

+0

http://wiki.phonegap.com/w/page/Upgrade-your-PhoneGap-Xcode-Template-for-3rd-Party-Library-Linkage-Problems के अनुसार, ऐसा लगता है कि आप ध्वज का सही ढंग से उपयोग कर रहे हैं । मेरा अनुमान यह भी होगा कि आपके पास उस लाइब्रेरी में एक जैसा वर्ग या श्रेणी है जिसे आप लिंक कर रहे हैं ... –

1

मैंने अभी हमारे प्रोजेक्ट में बल_लोड जोड़ा है और सभी सरल वाक्यविन्यास का उपयोग करके ठीक है। पुस्तकालय एक ही परियोजना में निर्मित निर्भरता है। लाइब्रेरी को लिंक कमांड लाइन पर दो बार शामिल किया गया है: एक बार सामान्य इनपुट फ़ाइल के रूप में और एक बार -force_load के लिए तर्क के रूप में। आप तर्क के चारों ओर उद्धरण वर्ण डालना चाह सकते हैं।

असल में, मुझे यह कॉन्फ़िगरेशन-निर्भर सेटिंग्स का उपयोग करके भी काम कर रहा है (क्योंकि पथ डीबग बनाम रिलीज और डिवाइस बनाम सिम्युलेटर के लिए स्पष्ट रूप से अलग है)।

शुभकामनाएं।

+0

असल में कारण , वह बल_लोड मेरे लिए काम नहीं कर रहा था, था, कि मैंने उद्धरण जोड़ा। उद्धरणों को हटाने से एक्सकोड में दो लाइनों में विभाजित होता है, लेकिन यह आईडीई से कंपाइलर तक पारित होने पर काम करता है। उद्धरण के साथ यह आईडीई में सही तरीके से प्रदर्शित होता है, लेकिन संकलक इसे इस तरह से संभाल नहीं सकता है। – Kaiserludi

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