cordova - एक्सकोड 5-एलडी के लिए अद्यतन के बाद: प्रतीक आर्किटेक्चर armv7 या armv7s लिंकर त्रुटि के लिए नहीं मिला




static-libraries cpu-architecture (5)

मैंने अपने आईफोन 4 एस सॉफ़्टवेयर को आईओएस 7 बीटा 2 में अपडेट किया, जबकि मैं एक नए ऐप (फोनगैप) पर अंतिम छोर लगाने के बीच में था .. अच्छा विचार नहीं!

ऐसा करने के बाद एक्सकोड ने मेरे आईफोन का पता नहीं लगाया, इसलिए मैंने एक्सकोड 5 बीटा स्थापित किया। इसके साथ घूमने के बाद मुझे अंततः अपने फोन का पता लगाने के लिए मिला। एकमात्र समस्या अब आर्किटेक्चर के साथ एक त्रुटि है।

यहां उत्पन्न त्रुटियां हैं:

ld: warning: ignoring file /Users/-----------/Library/Developer/Xcode/DerivedData/testtest-bmnbmujiosugcmgeiceofgcfmsec/Build/Products/Debug-iphoneos/libCordova.a, file was built for archive which is not the architecture being linked (armv7s): /Users/--------/Library/Developer/Xcode/DerivedData/testtest-bmnbmujiosugcmgeiceofgcfmsec/Build/Products/Debug-iphoneos/libCordova.a
Undefined symbols for architecture armv7s:
  "_OBJC_METACLASS_$_CDVCommandDelegateImpl", referenced from:
      _OBJC_METACLASS_$_MainCommandDelegate in MainViewController.o
  "_CDVLocalNotification", referenced from:
      -[AppDelegate application:didReceiveLocalNotification:] in AppDelegate.o
  "_OBJC_CLASS_$_CDVCommandDelegateImpl", referenced from:
      _OBJC_CLASS_$_MainCommandDelegate in MainViewController.o
  "_OBJC_CLASS_$_CDVCommandQueue", referenced from:
      _OBJC_CLASS_$_MainCommandQueue in MainViewController.o
  "_OBJC_METACLASS_$_CDVViewController", referenced from:
      _OBJC_METACLASS_$_MainViewController in MainViewController.o
  "_OBJC_METACLASS_$_CDVCommandQueue", referenced from:
      _OBJC_METACLASS_$_MainCommandQueue in MainViewController.o
  "_CDVPluginHandleOpenURLNotification", referenced from:
      -[AppDelegate application:handleOpenURL:] in AppDelegate.o
  "_OBJC_CLASS_$_CDVViewController", referenced from:
      _OBJC_CLASS_$_MainViewController in MainViewController.o
ld: symbol(s) not found for architecture armv7s
clang: error: linker command failed with exit code 1 (use -v to see invocation)

मेरे फोन पर काम करने के लिए आर्किटेक्चर को किस बदलाव में बदला जाना चाहिए, इस पर कोई विचार? (यह एमुलेटर पर ठीक काम कर रहा है)


njtman का सही जवाब था। मेरे पास टिप्पणी करने का प्रतिनिधि नहीं है इसलिए मैं और विवरण जोड़ रहा हूं।

मानक आर्किटेक्चर (armv7, armv7s) का उपयोग करने के लिए आपको आईओएस 7 एसडीके की आवश्यकता है।

मेरी परियोजना armv7s सहित नहीं है (armv7)।

इसे ठीक करने के लिए, ओपन कॉर्डोवालिब.एक्सकोडप्रोज़, बिल्ड सेटिंग्स के तहत (शीर्ष पंक्ति में मेनू में से एक, केंद्रित संरेखण) आर्किटेक्चर, आर्किटेक्चर, डीबग और रिलीज के तहत, मानक आर्किटेक्चर का उपयोग करके आईओएस 7.0 जोड़ें।


क्योंकि मेरा lib.a केवल armv7 के लिए है

मैंने क्या किया था

सक्रिय वास्तुकला केवल = हां

buildSettings = {
                ALWAYS_SEARCH_USER_PATHS = NO;
                "ARCHS[sdk=iphoneos*]" = (
                    armv7s,
                    armv7,
                );
                "ARCHS[sdk=iphoneos6.*]" = (
                    armv7s,
                    armv7,
                );
                "ARCHS[sdk=iphoneos7.*]" = (
                    armv7,
                    armv7s,
                );

यह बनाया गया था और ठीक संग्रहित किया गया था

आशा करता हूँ की ये काम करेगा


मैं एक्सकोड 5 का उपयोग कर रहा हूं इसलिए आईओएस एसडीके 7. समाधान जो मेरे लिए काम करता था वह केवल arm64 आर्किटेक्चर को हटाने के लिए था।

प्रोजेक्ट लक्ष्य का चयन करें (CordovaLib.xcodeproj नहीं) और बिल्ड सेटिंग्स> मान्य आर्किटेक्चर में, यदि सूची में है तो arm64 को हटा दें। Arm64 आर्किटेक्चर को हटाने के बाद मेरा यहां है।


मैंने valid architectures सेक्शन से armv7s हटा दिए हैं और यह मेरे लिए काम करता है।

सेटिंग्स बनाएं -> आर्किटेक्चर -> मान्य आर्किटेक्चर


संक्षिप्त जवाब:

  • केवल सक्रिय आर्किटेक्चर बनाएं (सेटिंग पैरामीटर कुंजी 'ONLY_ACTIVE_ARCH' बनाएं) अपनी सभी स्थिर लाइब्रेरीज़ 'प्रोजेक्ट बिल्ड सेटिंग्स से) या इसे नीचे' स्क्रीन 'में' नो 'के साथ ओवरराइट करें:

विस्तृत उत्तर:

समस्या यह है कि आपकी स्थिर लाइब्रेरी 'libCordova.a' जिसे आप अपने मुख्य ऐप में जोड़ रहे हैं, केवल एक आर्किटेक्चर (armv7, लेकिन armv7s) के लिए संकलित नहीं है।

आपने संभवतः एक्सकोड को अपने स्थिर पुस्तकालय परियोजनाओं के लिए सभी अनुशंसित परिवर्तन करने की अनुमति दी है, यह पढ़े बिना कि वास्तव में ये परिवर्तन क्या हैं। अपने लिए बोलते हुए, मैंने कभी भी उस जानकारी संवाद (नीचे स्क्रीनशॉट) पर नज़र डालने के लिए परेशान नहीं किया है, जब मैंने एक्सकोड के एक नए संस्करण पर स्विच किया - अब तक।

समस्या यह है कि इन परिवर्तनों को डीबग के लिए सक्रिय करने के लिए सक्रिय बिल्ड आर्किटेक्चर नामक एक नई सुविधा बनाता है (बिल्डिंग पैरामीटर कुंजी बनाना 'ONLY_ACTIVE_ARCH' है)। सिद्धांत रूप में, यह एक्सकोड का एक बहुत अच्छा संवर्द्धन है, क्योंकि इसे YES पर सेट करना तेजी से निर्माण के समय की ओर जाता है, क्योंकि एक्सकोड केवल उस कनेक्टेड डिवाइस के आर्किटेक्चर को संकलित करता है जिसे आपने वर्तमान में शीर्ष पर चुना है जब आप रन बटन दबाते हैं।

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

तो मेरी सिफारिश केवल अपनी सभी स्थिर पुस्तकालयों 'परियोजना निर्माण सेटिंग्स से बिल्ड सक्रिय आर्किटेक्चर के लिए प्रोजेक्ट स्तर पर मूल्य को पूरी तरह से निकालना है। क्योंकि यदि आप आईओएस डिफ़ॉल्ट पर नजर डालें, तो यह नहीं है। निश्चित रूप से आप यह सुनिश्चित करने के लिए 'NO' पर सेटिंग को ओवरराइट कर सकते हैं कि सेटिंग सही है, भले ही भविष्य में डिफ़ॉल्ट मान बदल जाएगा (सीएफ 1 स्क्रीनशॉट)।





xcode5