Xcode लिंकर त्रुटि: आर्किटेक्चर x86_64 के लिए बहुत छोटा फ़ाइल


89

मैं Xcode में एक एप्लिकेशन विकसित कर रहा हूं।

जब मैं बनाने की कोशिश करता हूं, तो यह त्रुटि सामने आती है:

ld: in /Users/theodore/Library/Developer/Xcode/DerivedData/Tower-bkpdifuqssebjdgurzmtirbxejnn/Build/Intermediates/Tower.build/Debug/Tower.build/Objects-normal/x86_64/TWRAppDelegate.o, file too small for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

क्या किसी को पता है कि क्या गलत है?


60
एक पूर्ण पुनर्निर्माण / साफ करने की कोशिश करें। यह संभव है कि पिछले बिल्ड को असामान्य रूप से निरस्त कर दिया गया हो, जिससे TWRAppDelegate.oफ़ाइल दूषित या शून्य आकार की हो जाए।
मार्टिन बॉलीग

5
थोड़ा सा झुकाव: आप ऐसा करते हैं कि cmd + shift + k के साथ, यदि वह काम नहीं करता है, तो व्युत्पन्न डेटा फ़ोल्डर में जाएं और अपने प्रोजेक्ट के रूप में नामित फ़ोल्डर को हटा दें।
रामी अल ज़ूहरी

3
@RamyAlZuhouri: अब खुद फोल्डर बनाने के लिए ट्रशिंग को जाने की कोई आवश्यकता नहीं है। विकल्प को दबाए रखें और क्लीन कमांड (जो उत्पाद मेनू में है) "क्लीन बिल्ड फोल्डर ..." में बदल जाता है, जो आपके लिए ऐसा करता है।
पीटर होसी

मार्टिन बुलिग के सुझाव से मेरी समस्या हल हो गई। धन्यवाद!
tbodt

2
@PeterK। यह मुझे अच्छा प्रश्न सिल्वर बैज कमा रहा है :-)
tbodt

जवाबों:


193

चोरी @ मार्टिन-बाउलिग का जवाब:

एक पूर्ण पुनर्निर्माण / साफ करने की कोशिश करें। यह संभव है कि पिछले निर्माण को असामान्य रूप से समाप्त कर दिया गया हो, जिससे TWRAppDelegate.o फ़ाइल दूषित या शून्य-आकार की हो जाएगी।


7
आखिरकार! तुम इसके लायक हो।
tbodt

धन्यवाद! :-) खैर, @ मार्टिन-बैलीग की टिप्पणियों में उत्तर ने मेरी मदद की, लेकिन इसे वास्तविक उत्तर के रूप में यहाँ रखना बेहतर होगा।
पीटर के।

3
मेरे प्रोजेक्ट को बनने में थोड़ा समय लगता है। आप केवल 1-4 ऑब्जेक्ट फ़ाइलों को हटाने के साथ दूर हो सकते हैं जो भ्रष्ट हो जाते हैं यदि आप सब कुछ के बजाय असामान्य रूप से बिल्ड को रोकते हैं।
फर्नांडो मैजॉन

22

मैं आमतौर पर प्रश्न में फ़ाइल में एक स्थान (उस मामले के लिए कोई भी चरित्र हो सकता है) जोड़ सकता हूं, इसे हटा सकता हूं और फिर सहेज सकता हूं। एक साफ निर्माण की तुलना में आसान और तेज।


3
आपका जवाब मुझे परियोजना के पुनर्निर्माण के 10 मिनट बचाने के लिए! धन्यवाद
Accid तेज

यह उत्तर शीर्ष पर जाना चाहिए!
टिंग यी शिह

8

इस समस्या को स्वचालित रूप से ठीक करने के लिए Build Script Phase को जोड़ा जा सकता है। गोटो Xcode -> आपका प्रोजेक्ट -> आपका लक्ष्य -> ​​निर्माण चरण -> + -> नया रन स्क्रिप्ट चरण

इसका नाम बदलें Xcode Link Fixऔर इसे Compile Sourcesचरण से ऊपर ले जाएं । इसे स्क्रिप्ट बॉडी में पेस्ट करें:

# Legacy build system
legacy_dir=`dirname "${LD_DEPENDENCY_INFO_FILE}"`
if [ -d "${legacy_dir}" ]; then
    find "${legacy_dir}" -size 0 | while read -d $'\n' file; do
        rm "$file"
    done
fi

# New build system
if [ -d "${OBJECT_FILE_DIR_normal}" ]; then
    find "${OBJECT_FILE_DIR_normal}" -size 0 | while read -d $'\n' file; do
        rm "$file"
    done
fi

यह स्क्रिप्ट शून्य आकार के साथ ऑब्जेक्ट फ़ाइलों की जांच करती है और उन्हें हटा देती है जब संकलन अगले चरण में किया जाता है तो यह सफल होता है।

यदि आपके पास कई हैं तो आपको हर ऐप लक्ष्य के लिए इस स्क्रिप्ट को जोड़ना होगा।

इस स्क्रिप्ट को चलाने के लिए ~ 0.1 सेकंड का समय लगता है और आपको पूर्ण प्रोजेक्ट पुनर्निर्माण से बचाता है।


यह सच है! हर प्रोजेक्ट में लगना चाहिए।
निक कोव


5

बस अपने टर्मिनल ऐप में cmd ​​चलाकर इस फ़ाइल को निकालें:

rm /Users/theodore/Library/Developer/Xcode/DerivedData/Tower-bkpdifuqssebjdgurzmtirbxejnn/Build/Intermediates/Tower.build/Debug/Tower.build/Objects-normal/x86_64/TWRAppDelegate.o


1
मैंने इसे उसी तरह से हल किया, जो मेरी बड़ी परियोजना पर पूर्ण स्वच्छ / निर्माण से बहुत तेज है। अगली बार मैं @Anton Plebanovich के समाधान को आजमाऊंगा, यह इस सुधार को स्वचालित करने का एक शानदार तरीका हो सकता है।
रोमानो

2

पूरा कैश साफ किए बिना त्रुटि को ठीक करने का त्वरित तरीका:

  1. त्रुटि में वर्णित खुली फ़ाइल (इस प्रश्न के मामले में TWRAppDelegate)
  2. सीएमडी + ए
  3. सीएमडी + एक्स
  4. पुनर्निर्माण - असफल
  5. सीएमडी + वी
  6. पुनर्निर्माण - सफल

1

चूंकि एक स्वच्छ परियोजना के निर्माण में बहुत लंबा समय लग सकता है, इसलिए उन लोगों के लिए कम रास्ता है जिनके पास कैश में भ्रष्ट फ़ाइल तक पहुंच है:

  • फ़ाइल हटाएँ (संदर्भ निकालें)
  • प्रोजेक्ट बनाएं
  • फ़ाइल पुन: दर्ज करें
  • प्रोजेक्ट बनाएं

पूर्ण संस्करण ताकि आपको फ़ाइल खोजने में कोई परेशानी न हो:

  • फ़ाइल को Xcode प्रोजेक्ट नेविगेटर में खोजें
  • फ़ाइल पर राइट क्लिक करें और "खोजक में शो" दबाएं (उस स्थान पर एक खोजक को खोलता है जहां फ़ाइल है)
  • फ़ाइल को Xcode में चुनें और बैकस्पेस दबाएं, फिर "संदर्भ निकालें" पर क्लिक करें
  • प्रोजेक्ट बनाएं (यह विफल हो जाएगा लेकिन इसके खत्म होने का इंतजार करें)
  • फ़ाइल को पुन: खोजक से उसी स्थान पर खींचकर पुन: दर्ज करें, जहां आपने इसे हटाया था
  • प्रोजेक्ट बनाएं (अब काम करना चाहिए)

1

आप बस TWRAppDelegate.o फ़ाइल को हटा सकते हैं और अपना निर्माण जारी रख सकते हैं। त्रुटि संदेश में वर्णित पूर्ण पथ की प्रतिलिपि बनाएँ और इसे अपने टर्मिनल में 'rm' कमांड के पीछे चिपकाएँ। प्रोजेक्ट से फ़ाइल को साफ / पुनर्निर्माण, व्युत्पन्न डेटा को हटाने, फ़ाइल को जोड़ने / हटाने आदि की कोई आवश्यकता नहीं है।


-1

चरण 1. पर जाएं: प्रोजेक्ट> सेटिंग बनाएँ> खोज पथ

चरण 2. सेट करें "हमेशा खोजें उपयोगकर्ता पथ" के लिए हां

चरण 3. परियोजना का निर्माण करें (आपको एक चेतावनी मिलेगी लेकिन परियोजना का निर्माण होगा)

चरण 4. सेट करें "हमेशा खोजें उपयोगकर्ता पथ" वापस नहीं और चेतावनी को खत्म करने के लिए फिर से निर्माण करें


इसे केवल उन लोगों के लिए जोड़ सकते हैं जिन्हें यह उत्तर मिलता है। "ऑलवेज सर्च यूजर पाथ" को Xcode 8.3 के रूप में चित्रित किया गया है और डॉक्यूमेंटेशन से यह भी कहा जाता है कि "इसे अक्षम करने की दृढ़ता से अनुशंसा की जाती है।" (यानी इसे NO पर सेट करना)
Groot

-1

मेरे मामले में एक साफ पुनर्निर्माण नहीं किया, इसलिए मैं समझाता हूं कि मैंने इस समस्या को कैसे हल किया:
- फ़ाइल का संदर्भ हटा दिया (फ़ाइल को डिलीट नहीं करें)
- प्रोजेक्ट में फिर से फ़ाइल जोड़ें और चलाएं


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