बिल्ड एरर - फाइल में आवश्यक आर्किटेक्चर i386 गायब होना


105

अपना iPhone एप्लिकेशन बनाते समय मुझे यह त्रुटि हो रही है:

ld: चेतावनी: in /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS3.1.sdk/System/Library/Frameworks/UIKit.framework/UIKit, फ़ाइल में आवश्यक आर्किटेक्चर i386 गुम

यह मेरे ऐप में सभी रूपरेखाओं के लिए समान है। यह बहुत अजीब है क्योंकि यह पहले नहीं हो रहा था।


क्या आपके द्वारा स्नो लेपर्ड और नया iPhone SDK (Xcode 3.2) स्थापित करने के बाद ऐसा हुआ था?
एवोकैड

8
मेरा जवाब समस्या को हल करता है। कृपया जांचें।
जॉर्डन

9
एक अन्य संभावना है कि उत्तरों में चर्चा नहीं की गई है कि यदि आप एक गैर-सार्वभौमिक फ्रेमवर्क (यानी आपने एक armv6 / armv7 फ्रेमवर्क जोड़ा है और फिर एक सिम्युलेटर बिल्ड करने की कोशिश की है) के संदर्भ में आपको यह त्रुटि मिलेगी। यह मुख्य रूप से एक चिंता का विषय है यदि आप अपने स्वयं के कस्टम फ्रेमवर्क का निर्माण कर रहे हैं।
अरोठ

@ बरोबर भी सही है, कृपया इस प्रश्न की
ArkReversed

जवाबों:


131

ऐसा तब होता है जब आप अपने प्रोजेक्ट में एक फ्रेमवर्क जोड़ते हैं और अनजाने में आपके प्रोजेक्ट डायरेक्टरी में फ्रेमवर्क कॉपी कर लेते हैं।

यह फिक्स किसी भी iphone SDK * .Framework फ़ाइलों के लिए अपनी परियोजना निर्देशिका (जहाँ आप डिस्क पर अपनी परियोजना को संग्रहीत करते हैं) की जाँच करें और उन्हें हटा दें।

प्रोजेक्ट बाद में फाइन का निर्माण करेगा।


4
इसके अलावा, सिम्युलेटर के बजाय आईओएस डिवाइस पर इसका परीक्षण करें।
रैप्टर

यदि आपके पास एक और ढांचा है, तो परियोजना फ़ाइल को संशोधित करना भी उसी के संदर्भों को नष्ट करना प्रतीत होता है, इसने काम किया, और आसान था, धन्यवाद जॉर्डन
टेक्सियन

मेरे लिए काम नहीं करता है। मेरे प्रोजेक्ट डायरेक्टरी में कोई .framework फाइलें नहीं। Fwiw, मैंने एक साफ और फिर एक निर्माण किया और यह समस्या शुरू हुई। साफ-सुथरी चीजों को किसी न किसी तरह तोड़ा जाना चाहिए।
एलोसाक जूल

85

मेरे पास यही समस्या थी, और समाधान एक आसान समाधान निकला। बैकअप तब TextMate या TextEdit में project.pbxproj (आपकी प्रोजेक्ट फ़ाइल बंडल के अंदर स्थित) खोलें और "/ * शुरुआत XCBuildConfiguration खंड * /" शीर्षक वाले अनुभाग को खोजें। FRAMEWORK_SEARCH_PATHS नाम की एक कुंजी देखें और इसे हटा दें और यह सामग्री है (एक बार निर्माण प्रति विन्यास, इसलिए मैंने इसे दो स्थानों पर हटा दिया)। यहाँ एक उदाहरण है कि मैंने क्या हटाया:

FRAMEWORK_SEARCH_PATHS = (
"$(inherited)",
"\"$(DEVELOPER_DIR)/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS3.1.sdk/System/Library/Frameworks\"",);

मेरा प्रोजेक्ट अब iPhone डिवाइस और iPhoneSimulator दोनों के लिए बनाता है।


2
मैं यह सत्यापित कर सकता हूं कि यह वर्णित के अनुसार काम करता है। ऐसा लगता है कि Xcode आसानी से अपने मेटाडेटा के साथ संपर्क से बाहर हो सकता है जब अलग-अलग कंप्यूटरों के बीच Xcode proj चलते हैं; इस मामले में एक के साथ 3.0 और तेंदुआ, और अन्य 3.1 और हिम तेंदुए को स्थापित किया गया। FRAMEWORK_SEARCH_PATHS मेटाडेटा बिल्ड सेटिंग्स में रिक्त के रूप में दिखाता है, जबकि वास्तविक प्रोजेक्ट। Pbxproj में सामान है।
avocade

1
सहमत FRAMEWORK_SEARCH_PATHS ने मेरे लिए बिल्ड सेटिंग्स में भी रिक्त दिखाया। हालाँकि, प्रोजेक्ट को संपादित करना। समस्या के रूप में वर्णित प्रोजेक्ट। Pbxproj फ़ाइल को ठीक करता है।
अलास्दैर एलन

11
इसने मेरे लिए काम नहीं किया। फिर भी, आप मुझे देखने के लिए सही जगह पर ले जाते हैं। मेरी .pbxproj के पास FRAMEWORK_SEARCH_PATHS कुंजी नहीं थी, लेकिन LIBRARY_SEARCH_PATHS नाम की एक कुंजी थी।
विद्रोह

मैं दूसरी @rebellion। शायद नए XCode संस्करणों ने मुख्य नाम बदल दिया है।
मोशे

धन्यवाद, मेरे पास मेरी pbxproj फ़ाइल में एक आवारा LIBRARY_SEARCH_PATHS कुंजी भी थी। कुंजी Xcode 3 में प्रोजेक्ट सेटिंग्स में बोल्डफेस में दिखाई दी, लेकिन कोई मूल्य नहीं है। इससे मुझे विश्वास हो गया कि कुछ गड़बड़ है। मैंने Xcode 4 प्रीव्यू 5 में एक बार प्रोजेक्ट ओपन किया था, जिसके बाद ऐसा हुआ।
मावेक्सेल

43

यहाँ क्या हुआ है कि एक्सकोड ने रहस्यमय तरीके से "फ्रेमवर्क सर्च पाथ्स" प्रविष्टि को जोड़ा है जो एक विशेष iPhone डिवाइस एसडीके को इंगित करता है। उदाहरण के लिए, मेरा हाल ही में सेट किया गया था:

$(DEVELOPER_DIR)/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS2.2.1.sdk/System/Library/Frameworks

यह कंपाइलर को गलत आर्किटेक्चर के फ्रेमवर्क खोजने की ओर ले जाता है। अपने लक्ष्य की निर्माण सेटिंग्स में "फ्रेमवर्क सर्च पाथ्स" कुंजी के तहत किसी भी मान को हटाने से समस्या हल हो जाएगी।


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

"फ्रेमवर्क सर्च पाथ्स" मेरे मामले में पहले से ही खाली हैं। सटीक त्रुटि जो मुझे मिल रही है वह है ld: iOS सिम्युलेटर के लिए निर्माण, लेकिन MacOSX फ़ाइल '/usr/lib/libSystem.B.dylib' के लिए आर्किटेक्चर i386 क्लैंग के लिए बनाया गया dylib के साथ लिंक करना: त्रुटि: लिंक कमांडर निकास कोड 1 के साथ विफल हुआ ( उपयोग -v मंगलाचरण देखने के लिए) मैं Mavericks पर एसडीके 7.0 का उपयोग कर रहा हूं।
Ans

मेरे पास एक ही त्रुटि थी, मैंने बिल्ड सेटिंग्स के तहत फ्रेमवर्क खोज पथ से मूल्यों को हटा दिया और अब यह संक्षिप्त रूप से संकलित करता है।
नीरव

10

मैं सिर्फ यह उल्लेख करना चाहता था कि XCode में यदि आप "प्रोजेक्ट सेटिंग्स संपादित करें" पर जाएं और "खोज पथ" ढूंढें "फ्रेमवर्क खोज पथ" के लिए एक फ़ील्ड है। प्रोजेक्ट फ़ाइल को हैक किए बिना इसे अपडेट करने से समस्या को ठीक करना चाहिए!

चीयर्स!

जेसी


मेरे पास एक ही मुद्दा है जो मुझे बिल्कुल पागल बना रहा है। ऐसा लगता है कि आप लोग समाधान जानते हैं, लेकिन मैं "प्रोजेक्ट.पब्लक्सप्रोज़" फ़ाइल नहीं ढूँढ सकता और यह नहीं ढूँढ सकता कि "प्रोजेक्ट सेटिंग्स संपादित करें" कहाँ स्थित है।
समन ०१ सिप

2
XCode 4.2.1 में मैंने इसे इस प्रकार पाया: प्रोजेक्ट नेविगेटर में प्रोजेक्ट नाम पर क्लिक करें। दिखाई देने वाली प्रॉपर्टीज़ स्क्रीन में, 'सेटिंग बनाएँ' टैब चुनें। खोज पथ इस स्क्रीन में स्थित हैं। उन्हें हटाना मेरे लिए काम कर गया।
dsteele

8

जाँच करें कि आपने अपने प्रोजेक्ट में फ्रेमवर्क को कॉपी नहीं किया जब आपने इसे जोड़ा था यदि आप इसे कॉपी करते हैं, तो यह मूल पथ नहीं ढूँढ सकता है। इस समस्या को ठीक करने के लिए। अपने प्रोजेक्ट में अपने फ्रेमवर्क फ़ोल्डर से AVFoundation फ्रेमवर्क को हटाएं, फिर इसे फिर से जोड़ें, लेकिन इस बार, सुनिश्चित करें कि आपके पास कॉपी की गई कॉपी नहीं है।

यह मेरे लिए तय हो गया!


8

मैंने इसे एक अलग तरीके से तय किया। जिस कारण से मुझे यह त्रुटि मिल रही थी, वह यह था कि मैंने अपनी परियोजना में दो बार सुरक्षा जोड़ी की थी। मैं xcode में सुरक्षा ढांचे को देखने में सक्षम नहीं था, मैंने खोजक में इस परियोजना को खोला और इस ढांचे को पाया। मैंने हटा दिया और समस्या हल हो गई।


7

यदि आपका ऐप डिवाइस पर चलने के लिए है, तो सुनिश्चित करें कि आप सिम्युलेटर पर इसे चलाने की कोशिश नहीं कर रहे हैं। स्पष्ट लग सकता है, लेकिन वैसे भी जांच करें।


5

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

सबसे पहले, अपनी सभी फ़ाइलों को एक नए प्रोजेक्ट में जोड़ें। यह आमतौर पर काम करने लगता है। एक दर्द की तरह, यद्यपि।

दूसरा, आप XCode / Get Info / Build / Library Search Path में प्रोजेक्ट राइट-क्लिक कर सकते हैं। /Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator3.1.sdk/usr/lib के समान नए पथ जोड़ें। प्रत्येक संस्करण (2.2.1, आदि) और मंच (सिम्युलेटर या iPhoneOS) के लिए उस स्ट्रिंग के उपयुक्त संस्करण जोड़ें। यदि आपकी समस्याएँ हैं, तो फ़्रेमवर्क खोज पथ के लिए एक समान क्रिया करें।

तीसरा, जो अधिक काम है, लेकिन अधिक विश्वसनीय है, MyProject.xcodeproj के भीतर से project.pbxproj खोलना है (इसके लिए टेक्स्टमेट अच्छा है)। "/ * आरंभ XCBuildConfiguration खंड * /" के लिए देखें, फिर "LIBRARY_SEARCH_PATHS" और "FRAMEWORK_SEARCH_PATHS"। उपयुक्त के रूप में पथ जोड़ें या संशोधित करें, और फ़ाइल को सहेजें।

किसी भी मामले में, बट में दर्द, और मुझे यकीन है कि इस कारण को इंगित करना है क्योंकि मैंने ऐसा एक-दो बार किया है। प्रोजेक्ट ठीक बनाता है, तो बस थोड़ा सा कारण प्रतीत होता है के साथ ऐसा करने से इनकार करता है।


मैं बस एक नई परियोजना शुरू करने जा रहा हूं। ओह कुआँ।
गाबे शाहबाजियन

आप "फ्रेमवर्क सर्च पाथ्स" को एक लक्ष्य के सूचना पैनल से सेटिंग को ठीक कर सकते हैं।
जॉन क्रॉम्पर्टी

मुझे त्रुटि मिली लेकिन ऊपर वर्णित मुद्दों के फ्रेमवर्क नहीं थे। उत्सुकता से, एक कंप्यूटर पर, परियोजना को एसवीएन से बाहर की जाँच की जा सकती है और ठीक बनाया जा सकता है, जबकि दो अन्य पर, यह अचानक प्रत्येक बिल्ड पर इस त्रुटि के परिणामस्वरूप हुआ। एकमात्र (और बल्कि सरल) फिक्स - सभी प्रकार के अन्य समाधानों की कोशिश करने के बाद - एक नई रिक्त परियोजना बनाना और सभी फाइलों को उसमें स्थानांतरित करना था।
mmattke

यह तरीका मेरे लिए काम कर गया। मेरे पास काम करने का एक प्रोजेक्ट सेट था जो अचानक एक दिन बिल्कुल एक कॉन्फ़िगरेशन के लिए बनना बंद हो गया। कोई कारण नहीं। ऊपर टेक्स्टमेट तकनीक का इस्तेमाल किया और देखा कि उस विन्यास से "$ (SDKROOT) / डेवलपर / लाइब्रेरी / फ्रेमवर्क" गायब था। पता नहीं क्यों, और मैं Xcode का उपयोग करके इसे देखने में असमर्थ था।
रॉब

4

"प्रोजेक्ट सेटिंग्स संपादित करें" और "खोज पथ" ढूंढें "फ्रेमवर्क खोज पथ" के लिए एक फ़ील्ड है। सभी हटा दो!!


4

मेरे साथ भी यहीं हुआ। एक बेहतरीन साथी की बदौलत हमें इसका जवाब मिला। आपका Xcode सिम्युलेटर की ओर इशारा कर रहा हो सकता है .. इसे IOS डिवाइस पर बदलें। इसके बाद चिकना करें ...


1

टर्मिनल से फ़्रेम पर फ़ाइल कमांड चलाएँ :

file /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS3.1.sdk/System/Library /Frameworks/UIKit.framework/UIKit

आपको एक संदेश वापस मिलना चाहिए जिसमें आपको बताया गया है कि UIKit बाइनरी किस आर्किटेक्चर के साथ संगत है। यदि आप "i386" सूचीबद्ध नहीं देखते हैं, तो आप किसी तरह से UIKit के i386 संस्करण को निकालने में कामयाब रहे, जिसका अर्थ है कि आप सिम्युलेटर के लिए निर्माण नहीं कर सकते। इसे ठीक करने के लिए, आपको फिर से स्थापित करना होगा एसडीके।

यदि आपको कोई अन्य त्रुटि मिलती है, तो उम्मीद है कि यह वास्तविक समस्या क्या है यह जानने में आपकी मदद करेगी।


Sdk को पुनर्स्थापित किया और मुझे अभी भी वही सटीक बिल्ड त्रुटि मिलती है।
गाबे शाहबाजियन

मुझे यह समस्या हो रही है। पहले से ही चेक किए गए ढांचे और लाइब्रेरी पथ और वे साफ हैं। कमांड फ़ाइल /Developer/Platforms.../IKIK.framework/UIKit केवल "माच-ओ गतिशील रूप से साझा लाइब्रेरी बांह" कहती है। क्या वास्तव में पूरे एसडीके को स्थापित करना आवश्यक है ?, या क्या मैं रूपरेखा के पूर्ण संस्करण की नकल कर सकता हूं?
अलेक्जेंडर फ्राडिएनी

सीखने के लिए अच्छा है! मेरे मामले के लिए, armv7 और i386 है, लेकिन कोई armv6 नहीं है!
9

1

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


1

अपनी लक्ष्य सेटिंग में अपनी लाइब्रेरी खोज पथ देखें। कभी-कभी नासमझ पुस्तकालय में प्रवेश कर जाते हैं और यह आपको एक समान त्रुटि देगा।

आप इस अनुभाग में सभी प्रविष्टियाँ निकाल सकते हैं।


0

मैंने अभी कुछ अलग अनुभव किया है, क्योंकि मैं अपनी लाइब्रेरी (WM_GSRecognizerLib) पर काम करता हूं, लेकिन त्रुटि समान है।

क्या होगा: कुछ अद्यतनों के कारण, (.a) को शामिल करने के लिए lib को लक्षित करने वाला पथ "Debug-iphoneos" फ़ोल्डर (जहां यह उत्पन्न होता है) से था। जेनेरिक iOS डिवाइसेस के लिए संकलन ने ठीक काम किया, लेकिन सिम्युलेटर के लिए नहीं, लापता i386 आर्किटेक्चर के लिए शिकायत की।

मैंने इस मुद्दे के लिए क्या किया है, "डिबग-आईफ़ोनोइमुलेटर" फ़ोल्डर से बायनेरिज़ को भी शामिल करना है।

यह इस विषय के लिए मदद कर सकता है, क्योंकि स्पष्टीकरण यहां दिया गया है: डिवाइसों को arm64 / armv7 / armv7s के लिए बायनेरिज़ की आवश्यकता होती है, जबकि सिम्युलेटर को i386 की आवश्यकता होती है।


0

मेरा समाधान सिम्युलेटर लक्ष्य डिबग YES पर सेट करना था, बस .project पर आर्किटेक्चर के रूप में जोड़ी गई नई लाइन को देखने के लिए गिट स्थिति पर गौर करें। यदि आप इसे सेट नहीं करते हैं तो निर्माण सभी आर्किटेक्चरों के लिए चलेगा और कुछ गायब वास्तुकला जैसे i386 या अन्य को दिखाएगा। ध्यान दें कि स्पष्ट रूप से मुख्य मुद्दा कुछ ढांचे का उपयोग करना है जो किसी प्रकार की विशिष्ट वास्तुकला को लागू करता है।


-1

मुझे भी xcode संस्करण 4.0.2 का उपयोग करने में वही त्रुटि मिली, इसलिए मैंने xcode प्रोजेक्ट फ़ाइल का चयन किया था और उनके द्वारा मैंने लक्ष्य विकल्प का चयन किया था कि मैं अपने प्रोजेक्ट का ऐप देख सकता था इसलिए मैंने उस पर क्लिक किया और बिल्ड में चला गया सेटिंग्स विकल्प।

उनके खोज विकल्प में मैंने फ़्रेमवर्क खोज पथ टाइप किया , और सभी सेटिंग्स को हटा दिया और फिर बिल्ड बटन पर क्लिक किया और जो मेरे लिए ठीक काम किया,

धन्यवाद और सादर

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.