2011-10-17 9 views
10

के लिए जोड़ने जब मैं iOS 4.3 सिम्युलेटर (Xcode 4.2) में अपने आवेदन चलाने का प्रयास, मैं दुर्घटना जब मैं @autoreleasepool {मारा} के साथ:सशर्त @autoreleasepool

dyld: lazy symbol binding failed: Symbol not found: _objc_autoreleasePoolPush 

मैं चारों ओर देखा, और मैं देखें libarclite_iphoneos.a जोड़ने के लिए वर्कअराउंड है। सिम्युलेटर के लिए भी इसका एक संस्करण है, libarclite_iphonesimulator.a के रूप में भी।

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

उदाहरण के लिए, सिम्युलेटर के लिए निर्माण:

ld: warning: ignoring file /Developer-4.2/Platforms/iPhoneOS.platform/ 
Developer/usr/lib/arc/libarclite_iphoneos.a, missing required architecture 
i386 in file 

मैं कैसे एक साथ इन दोनों को ठीक करते हैं? या क्या मुझे अभी पुराने NSAutoreleasePool वाक्यविन्यास के साथ रहना चाहिए?

+0

llvm-gcc-4.2 के लिए बिल्ड सेटिंग्स में कंपाइलर बदलने के बाद से चिपकने वाला मुद्दा लगता है –

+0

मुझे लगता है कि यह तब से तय किया गया है; मैंने महीनों में इसमें भाग नहीं लिया है। –

उत्तर

10

स्वच्छ, साफ फ़ोल्डर, आईफोन सिम्युलेटर को रीसेट करने और यहां तक ​​कि पुनरारंभ करने जैसे परीक्षणों के बाद, मैंने आईओएस 5.0 से आईओएस 4.2 तक लक्ष्य निर्माण सेटिंग पर IPHONE_DEPLYMENT_TARGET बदल दिया। काम किया।

+0

मैं फिर से परीक्षण करूँगा, शायद यह तय किया गया है। धन्यवाद। –

+0

@amosel: आप किस xcode संस्करण का उपयोग कर रहे हैं? 4.2। या 4.2.1? –

+0

@ जोहान्स रुडॉल्फ मैं 4.2 बिल्ड 4 डी 1 9 0 – amosel

1

आप पुस्तकालय में लिंक करने के लिए अन्य लिंकर ध्वज निर्माण सेटिंग का उपयोग कर सकते हैं, और यह मान सकते हैं कि यह "कोई भी आईओएस" या "कोई आईओएस सिम्युलेटर" है या नहीं।

+0

ऐसा लगता है कि यह काम करना चाहिए। मैं इस पर काम कर रहा हूँ। :) –

+1

@ स्टेवनफ़िशर: मैं इसके बजाय रहस्यमय हूं कि यह पहली जगह क्यों जरूरी है। जब आपके परिनियोजन लक्ष्य को प्री-5.0 सेट किया गया है तो क्लैंग आपके लिए उपयुक्त लाइब्रेरी में लिंक होना चाहिए। –

+0

अच्छा बिंदु। मैंने कुछ और परीक्षण किया। ऐसा लगता है कि सिम्युलेटर के लिए संकलन करते समय यह एक समस्या है। डिवाइस के लिए संकलन करते समय, यह स्वचालित रूप से डिवाइस को शामिल करता है। मुझे 'LIBRARY_SEARCH_PATHS' और '-larclite_iphonesimulator' को' OTHER_LDFLAGS [sdk = iphonesimulator *] [arch = *] 'में' $ {PLATFORM_DEVELOPER_USR_DIR}/lib/arc' जोड़ना पड़ा था, लेकिन इसके लिए सेटिंग करने की आवश्यकता नहीं थी आईओएस हार्डवेयर। तो यह लगभग निश्चित रूप से एक बग है। –

0

आप दो स्थिर पुस्तकालयों को एक सार्वभौमिक पुस्तकालय में भी विलय कर सकते हैं। टर्मिनल पर जाएँ और कहते हैं कि (टर्मिनल में)

file /where/you/put/it/libarclite_universal.a 

कह कर

lipo -create -output /where/you/want/it/libarclite_universal.a /Developer/Platforms/iPhoneOS.platform/Developer/usr/lib/arc/libarclite_iphoneos.a /Developer/Platforms/iPhoneOS.platform/Developer/usr/lib/arc/libarclite_iphonesimulator.a 

आप परिणामी फ़ाइल सत्यापित कर सकते हैं यह चाहिए उत्पादन:

libarclite_universal.a: Mach-O universal binary with 3 architectures 
libarclite_universal.a (for architecture i386):current ar archive random library 
libarclite_universal.a (for architecture armv6):current ar archive random library 
libarclite_universal.a (for architecture armv7):current ar archive random library 

के बाद से इस lib स्थिर जुड़ा हुआ है, आपका अंतिम ऐप शामिल सिम लाइब्रेरी के कारण नहीं बढ़ेगा क्योंकि आपके ऐप द्वारा जो कुछ भी आवश्यक है, वह आपके अंतिम ऐप से जुड़ जाएगा।