Xcode bağlayıcı hatası: dosya x86_64 mimarisi için çok küçük


89

Xcode'da bir uygulama geliştiriyorum.

İnşa etmeye çalıştığımda şu hata çıkıyor:

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)

Neyin yanlış olduğunu bilen var mı?


59
Tam bir yeniden oluşturmayı / temizlemeyi deneyin. Önceki bir yapının anormal şekilde iptal edilmesi ve TWRAppDelegate.odosyanın bozuk veya sıfır boyutta kalması mümkündür .
Martin Baulig

5
Biraz kesinlik: Bunu cmd + shift + k ile yaparsınız, eğer işe yaramazsa, türetilmiş veri klasörüne gidin ve projeniz olarak adlandırılan klasörü silin.
Ramy Al Zuhouri

3
@RamyAlZuhouri: Artık kendi başınıza derleme klasörlerini çöpe atmanıza gerek yok. Option tuşunu basılı tuttuğunuzda (Ürün menüsünde bulunan) Temizle komutu "Derleme Klasörünü Temizle…" olarak değişir ve bunu sizin için yapar.
Peter Hosey

Martin Baulig'in önerisi sorunumu çözdü. Teşekkürler!
tbodt

2
@PeterK. Bana Güzel Soru gümüş rozeti kazandırıyor :-)
tbodt

Yanıtlar:


192

@ Martin-baulig'in cevabını çalmak:

Tam bir yeniden oluşturmayı / temizlemeyi deneyin. Önceki yapının anormal şekilde iptal edilmiş olması, TWRAppDelegate.o dosyasını bozuk veya sıfır boyutlu bırakmış olabilir.


7
En sonunda! Hakediyorsun.
tbodt

Teşekkürler! :-) Pekala, @ martin-bailig'in yorumlardaki cevabı bana yardımcı oldu, ancak gerçek bir cevap olarak burada olması daha iyi olurdu.
Peter K.

3
Projemin oluşturulması biraz zaman alıyor. Yapıyı her şeyden ziyade anormal bir şekilde durdurursanız, yalnızca 1-4 nesne dosyalarını silmekten kurtulabilirsiniz.
Fernando Mazzon

22

Genellikle söz konusu dosyaya bir boşluk eklerim (bu konuda herhangi bir karakter olabilir), kaldırırım ve ardından kaydederim. Temiz bir yapıdan daha kolay ve daha hızlı.


3
Cevabınız, projeyi yeniden inşa etmeme 10 dakika kazandırdı! Teşekkürler
Accid Bright

Bu cevap en üste gitmeli!
Ting Yi Shih

8

Bu sorunu otomatik olarak düzeltmek Build Script Phaseiçin eklenebilir. Goto Xcode -> Projeniz -> Hedefiniz -> Oluşturma Aşamaları -> + -> Yeni Çalıştırma Komut Dosyası Aşaması

Bunu yeniden adlandırın Xcode Link Fixve Compile Sourcesfazın üzerine taşıyın . Bunu komut dosyası gövdesine yapıştırın:

# 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

Bu komut dosyası, sıfır boyutlu nesne dosyalarını kontrol eder ve bunları kaldırır, böylece bir sonraki adımda derleme tamamlandığında başarılı olur.

Çok sayıda varsa, her uygulama hedefi için bu komut dosyasını eklemeniz gerekir.

Bu komut dosyasının çalışması ~ 0,1 saniye sürer ve sizi tam proje yeniden oluşturmadan kurtarır.


Dahice! Her projede olması gerekiyor.
Nik Kov

7

rm -rf /Users/hostname/Library/Developer/Xcode/DerivedData


5

terminal uygulamanızda cmd'yi çalıştırarak bu dosyayı kaldırmanız yeterlidir:

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


1
Ben de aynı şekilde çözdüm, büyük projem üzerine tam bir temizlik / inşa etmekten çok daha hızlı. Bir dahaki sefere @ Anton Plebanovich'in çözümünü deneyeceğim, bu düzeltmeyi otomatikleştirmek için mükemmel bir yol olabilir.
Romano

2

Tam önbelleği temizlemeden hatayı düzeltmenin hızlı yolu:

  1. Hatayla açıklanan dosyayı açın (bu sorunun olması durumunda TWRAppDelegate)
  2. cmd + A
  3. cmd + X
  4. Yeniden oluştur - başarısız
  5. cmd + V
  6. Yeniden oluştur - başarılı ol

1

Temiz bir proje oluşturmak çok uzun sürebileceğinden, önbellekte bozuk olan dosyaya erişimi olanlar için daha kısa bir yol vardır:

  • Dosyayı silin (Referansı kaldır)
  • Proje oluştur
  • Dosyayı yeniden yerleştir
  • Proje oluştur

Dosyayı bulmakta sorun yaşamamanız için tam sürüm:

  • Dosyayı Xcode proje gezgininde bulun
  • Dosyayı sağ tıklayın ve "bulucuda göster" e basın (dosyanın bulunduğu konumda bir bulucu açar)
  • Xcode'da dosyayı seçin ve geri tuşuna basın ve ardından "Referansı kaldır" ı tıklayın
  • Proje oluştur (başarısız olur ancak bitmesini bekleyin)
  • Dosyayı bulucudan yeni sildiğiniz konuma sürükleyerek yeniden yerleştirin
  • Proje oluştur (şimdi çalışmalı)

1

TWRAppDelegate.o dosyasını silebilir ve oluşturmanıza devam edebilirsiniz. Hata mesajında ​​belirtilen tam yolu kopyalayın ve terminalinizdeki bir 'rm' komutunun arkasına yapıştırın. Temizlemeye / yeniden oluşturmaya, türetilmiş verileri silmeye, dosyayı projeye eklemeye / projeden kaldırmaya vb.


-1

Adım 1. Şu konuma gidin: Proje> Yapı Ayarları> Arama Yolları

Adım 2. "Kullanıcı Yollarını Her Zaman Ara" yı Evet olarak ayarlayın

Adım 3. Projeyi oluşturun (Bir uyarı alırsınız ancak proje inşa edilir.)

Adım 4. "Kullanıcı Yollarını Her Zaman Ara" yı tekrar Hayır olarak ayarlayın ve uyarıyı ortadan kaldırmak için yeniden oluşturun


Bu yanıtı bulan diğerleri için bunu ekleyebilir miyim? "Her Zaman Kullanıcı Yolunu Ara", Xcode 8.3'ten itibaren kullanımdan kaldırılmıştır ve dokümantasyondan ayrıca "Devre dışı bırakılması şiddetle tavsiye edilir" yazmaktadır. (Yani HAYIR olarak ayarlamak)
Groot

-1

Benim durumumda temiz bir yeniden oluşturma olmadı, bu yüzden sorunu nasıl çözdüğümü açıkladım:
- Dosyaya olan referans kaldırıldı (dosyayı silmeyin)
- Dosyayı projeye tekrar ekleyin ve çalıştırın


Olumsuz oy bir açıklama gerektirir, benim için işe yaradı ve başkaları için de işe yarayabilir
David Santiago
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.