i386 mimarisi için simge bulunamadı


113

Xcode ile derlemeye çalışırken şu hatayı alıyorum:

  **Ld /Users/doronkatz/Library/Developer/Xcode/DerivedData/iKosher-bphnihrngmqtkqfgievrrumzmyce/Build/Products/Debug-iphonesimulator/iKosher.app/iKosher normal i386
    cd /Users/doronkatz/Sites/xCode/iKosher
    setenv MACOSX_DEPLOYMENT_TARGET 10.6
    setenv PATH "/Xcode4/Platforms/iPhoneSimulator.platform/Developer/usr/bin:/Xcode4/usr/bin:/usr/bin:/bin:/usr/sbin:/sbin"
    /Xcode4/Platforms/iPhoneSimulator.platform/Developer/usr/bin/gcc-4.2 -arch i386 -isysroot /Xcode4/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator4.2.sdk -L/Users/doronkatz/Library/Developer/Xcode/DerivedData/iKosher-bphnihrngmqtkqfgievrrumzmyce/Build/Products/Debug-iphonesimulator -L/Users/doronkatz/Sites/xCode/iKosher -F/Users/doronkatz/Library/Developer/Xcode/DerivedData/iKosher-bphnihrngmqtkqfgievrrumzmyce/Build/Products/Debug-iphonesimulator -filelist /Users/doronkatz/Library/Developer/Xcode/DerivedData/iKosher-bphnihrngmqtkqfgievrrumzmyce/Build/Intermediates/iKosher.build/Debug-iphonesimulator/iKosher.build/Objects-normal/i386/iKosher.LinkFileList -mmacosx-version-min=10.6 -all_load -ObjC -Xlinker -objc_abi_version -Xlinker 2 -lz -framework Security -framework CFNetwork -framework CoreData -framework Foundation -framework UIKit -framework CoreGraphics -framework QuartzCore -o /Users/doronkatz/Library/Developer/Xcode/DerivedData/iKosher-bphnihrngmqtkqfgievrrumzmyce/Build/Products/Debug-iphonesimulator/iKosher.app/iKosher

Undefined symbols for architecture i386:
  "_UTTypeCreatePreferredIdentifierForTag", referenced from:
      +[ASIHTTPRequest mimeTypeForFileAtPath:] in ASIHTTPRequest.o
  "_UTTypeCopyPreferredTagWithClass", referenced from:
      +[ASIHTTPRequest mimeTypeForFileAtPath:] in ASIHTTPRequest.o
  "_kUTTagClassMIMEType", referenced from:
      +[ASIHTTPRequest mimeTypeForFileAtPath:] in ASIHTTPRequest.o
  "_kUTTagClassFilenameExtension", referenced from:
      +[ASIHTTPRequest mimeTypeForFileAtPath:] in ASIHTTPRequest.o
  "_SCNetworkReachabilitySetCallback", referenced from:
      -[Reachability startNotifier] in Reachability.o
  "_SCNetworkReachabilityScheduleWithRunLoop", referenced from:
      -[Reachability startNotifier] in Reachability.o
  "_SCNetworkReachabilityUnscheduleFromRunLoop", referenced from:
      -[Reachability stopNotifier] in Reachability.o
  "_SCNetworkReachabilityCreateWithName", referenced from:
      +[Reachability reachabilityWithHostName:] in Reachability.o
  "_SCNetworkReachabilityCreateWithAddress", referenced from:
      +[Reachability reachabilityWithAddress:] in Reachability.o
  "_SCNetworkReachabilityGetFlags", referenced from:
      -[Reachability currentReachabilityStatus] in Reachability.o
      -[Reachability isReachable] in Reachability.o
      -[Reachability isConnectionRequired] in Reachability.o
      -[Reachability isConnectionOnDemand] in Reachability.o
      -[Reachability isInterventionRequired] in Reachability.o
      -[Reachability isReachableViaWWAN] in Reachability.o
      -[Reachability isReachableViaWiFi] in Reachability.o
      ...
ld: symbol(s) not found for architecture i386
collect2: ld returned 1 exit status**

Ne anlama geldiğinden emin değilim.

Yanıtlar:



92

Bu tür bir şeyin aniden ortaya çıktığını görürseniz, bu genellikle projenin ihtiyaç duyduğu bazı çerçevelerin eksik olduğu anlamına gelir. Kitaplıklar ve bağımlı projeler çerçeve gerektirebilir, bu nedenle yakın zamanda bir tane eklediyseniz bu hataya neden olabilir.

Çerçeve eklemek için, proje görünümünde proje adına sağ tıklayın, seçin Add, ardından listeden seçin Existing frameworks.... Ardından, eksik olan sembollerin bulunduğu çerçeveyi bulun.

Hangi çerçevelere ihtiyacınız olduğunu nasıl bulacağınıza gelince, Google'ı en kolay şekilde buldum, ancak muhtemelen Xcode yardım aramasını da kullanabilirsiniz. Sembollerden birini arayın, yönetilmeyen adı (örneğin SCNetworkReachabilityGetFlags) bulmak için elinizden gelenin en iyisini yapın ve ardından developer.apple.com adresinde bulduğunuz ilk belge bağlantısı genellikle doğru olanıdır. Genellikle çok uzağa avlanmak zorunda değilsiniz. Bu durumda, bu sayfa:

https://developer.apple.com/documentation/systemconfiguration/scnetworkreachability-g7d

Sonra sayfanın üst kısmında, SystemConfigurationbu durumda hangi çerçeveyi kullanacağınızı söyler . Öyleyse bunu projeye ekleyin ve tekrar derleyin.

O zaman işe yarayana kadar bunu yapmaya devam et ...

Düzenleme: Simülatörü hiç kullanmadım, ancak cihazda yaptığınız şey bu - aynı olduğunu varsayıyorum ...


64

Bazen hedefinizde eksik olan kaynak dosyalar vardır.

  1. hangi sembollerin eksik olduğunu inceleyin
  2. hedef-> derleme aşamaları-> kaynak derleme
  3. listelenmemişlerse eksik kaynak dosyaları ekleyin
  4. mutluluk için command + b

"Eksik" görünen dosyaları seçebilir ve sağ taraftaki yardımcı program çubuğunda, oluşturduğunuz Hedef için onay kutularının seçildiğini kontrol edebilirsiniz.


1
Bu genellikle iki proje dosyası kirli bir şekilde birleştirildiğinde ve hedef üyelik kaybedildiğinde ortaya çıkabilir.
Steven Hepting

1
Çok teşekkür ederim, bir şekilde xcode gerekli .m dosyasını yapım aşamaları aşamasına eklemedi!
dreampowder

1
Teşekkürler :) Projeye 2 dosya ekleyin ve ancak bu adımları
uyguladıktan

32

Aşağıdaki yöntemi kullanarak çözdüm (XCode 4 için):

1) Sağda proje özetini gösterecek olan proje gezinme penceresinde projeyi seçin

2) 4. sekme oluşturma aşamalarını seçin

3) İkiliyi kitaplık seçeneğiyle bağla seçeneğini seçin

4) Aldığınız çerçeveyi ekleyin

5) Çerçeveyi ana klasörden çerçeveler klasörüne taşıyın

6) Tekrar oluşturun ve hatalar gider.


Teşekkür ederim. Bu yanıtı MFMailCompose arayışında buldum ve MessageUI.framework ekleyerek çözdüm
Frank Yin

17

Sorun, eklenen dosyaya ilişkin hedef üyeliğin uygulama hedefinde eksik olmasıdır. Bu yüzden dosyayı seçin ve hedef üyelik kutusuna onay işaretini ekleyin

Örneğin, ortak bir yöntem tanımında gösterilen hata. Mgörüntü açıklamasını buraya girin


Bu Sembol Bulunamadı hatasını aldım ancak durum çok daha basitti. Şemalarımdan birine ihtiyaç duyduğum yeni bir işleve sahip yeni bir modül (dosya) ekledim. Birkaç hafta sonra farklı bir şema oluşturduğumda, bu işleve çağrı bulunamadı. Bunu hedefe eklemek gerekli olan tek şeydi.
Will

17

Aynı hataya birkaç saat harcadıktan sonra bunun için çözümümü eklemeyi düşündüm :(

Yukarıdaki adamlar, kontrol etmeniz gereken ilk şeyin herhangi bir çerçeve eklemeyi kaçırıp kaçırmadığınız konusunda haklıydı, yukarıdaki Pruthvid tarafından sağlanan adımlara bakın.

Sorunum, onu sildikten ve daha sonra tekrar ekledikten sonra eksik olan bir derleme sınıfıydı.

Bildirilen hata sınıfları için gösterildiği gibi "Derleme Kaynaklarınızı" kontrol edin. Oluşturduğunuz eksik sınıfları ekleyin.


2
TEŞEKKÜRLER ... Bu benim için çalışıyor. Özel bir sınıf uyguluyordum. Her iki özel sınıfı da kopyaladı. h ve .m'yi projeye dahil edin. Üzerine bir # ithalat yapıldı, yine de hata çıkıyor. ".M" sınıfını "Derleme Kaynakları" bölümüne eklemek sorunu çözdü!
GeneCode

Müthiş! Rocotilos ile aynı sorunu yaşadım, özel bir sınıf ithal ettim, ithal ettim ama yine de sorun yaşadım. Bu hile yaptı! Çok teşekkürler!
Souleiman

8

Eksik çerçevenin aslında "Hedefleme / Oluşturma Aşamaları / Kitaplıklarla İkili Bağlantı Oluşturma" altında listelendiğinden emin olun, eğer sadece eklemek değil. Daha önce de belirtildiği gibi, genellikle eksik bir çerçeveyi gösterir.

Projemde listelenen iki özdeş çerçeve vardı, bunlardan birini kaldırdığımda bu hatayı aldım, çünkü aynı zamanda onu "Kitaplıklarla Bağlantı İkili" listesinden de çıkardı. Geri ekledim ve sorun ortadan kalktı (ve hala listelenen iki çerçevem ​​var)


6

TÜM hedeflerim için Yapı Ayarları> Mimarileri değiştirerek projemdeki benzer bir hatayı düzelttim .

Sorun: Xcode 4.4'ten Xcode 4.5'e yükselttiğimde, projem simülatörde hala iyi derlendi ancak cihazlarda derlenmedi. Aygıtlarda , yanıltıcı "Apple Mach-O Bağlayıcı Hatası" ve "clang: error: linker komutu 1 çıkış koduyla başarısız oldu (çağrıyı görmek için -v kullanın ) hata " mimari armv7s için bulunamadı " )."

Nedeni (benim durumumda): Projemin birden fazla hedefi vardı ve ana hedef için Yapı Ayarları> Mimarileri armv7s mimarisini içerecek şekilde ayarlanmış olsa da, ana hedef başka bir hedefe bağlıydı (Yapı Aşamaları> Bağımlılıklar altında listelenmiştir) ve Diğer hedef için Yapı Ayarları> Mimarileri sıfırlamayı düşünmemiştim ve bunu armv7'leri içerecek şekilde değiştirmek zorunda kaldım. Sanırım simülatör ve cihaz farklı mimarilerde çalışıyordu ve bu yüzden simülatör sorunsuzken simülatörde sorun yoktu.


5

Projeniz başka bir projeye mi bağlı ve bu projedeki hedef, ana hedefinize doğrudan bağımlı olacak şekilde mi ayarlanmış? Durum böyleyse ve bağımlılık kurulmamışsa, bağımlı hedef tüm yapılandırmalar için oluşturulmayabilir (yani simülatör)

Sadece çılgın bir tahmin.


4

Bu soruna neden olabilecek başka bir durum, kodunuzun C ++ 'yı çağırması veya C ++ kodu tarafından çağrılmasıdır. Obj-C'den çağrıldığında "simge bulunamadı" olarak görünen kendi .c dosyamın yardımcı işlevi işleviyle ilgili bir sorun yaşadım. Düzeltme, dosya türünü değiştirmekti: Xcode 4'te, dosya türünü "Objective-C ++ Source" olarak ayarlamak için genişletilmiş bilgi bölmesini kullanın; Xcode 3'te, dosya türünü "source.cpp.objcpp" olarak değiştirmek için "Bilgi Al" seçeneğini kullanın.


4

Benim durumumda yayınlanan çözümlerin hiçbiri işe yaramadı. Projeyi silmem ve SVN sunucusundan yeni bir ödeme yapmam gerekiyordu . Şanslıyım ki proje bir sürüm kontrol sisteminde barındırılıyordu. Aksi takdirde ne yaparım bilmiyorum.


2

Tanımlanmış bir şablonlaştırılmış sınıf kullanan bir C ++ projesinde , aynı hatayı alırken , Proje Gezgini'nde tanımlanmış şablonlaştırılmış sınıfla .cpp dosyasını seçtim , ardından Sil> Referansı Kaldır. Ayrıca ilişkili .h dosyası, projede hala başvurulsa da, .cpp için aşağıdaki gibi bir #include ifadesine sahip olmalıdır:

#ifndef __CircularBuffer__CircularBufferT__
#define __CircularBuffer__CircularBufferT__

... snip ...

#include "CircularBufferT.cpp"
#endif /* defined(__CircularBuffer__CircularBufferT__) */

Görmek isterseniz, basit bir proje örneği github'da :

Bu biraz dolaylı bir hiledir ve bu geçici çözümün orijinal kaynağını hatırlamıyorum.


2

Bu hata aniden ortaya çıkarsa, projede bazı çerçevelerin eksik olduğu anlamına gelir. Kitaplıklar ve bağımlı projeler çerçeve gerektirebilir, bu nedenle yakın zamanda bir tane eklediyseniz bu hataya neden olabilir.

Çerçeve eklemek için, proje görünümünde proje adına sağ tıklayın, Ekle'yi seçin, ardından listeden Mevcut çerçeveler'i seçin. Ardından, eksik olan sembollerin bulunduğu çerçeveyi bulun.

Diğer bir şey ise, derlenen kaynaklarda herhangi bir sınıf eklerseniz ve bu sınıfları projeden kaldırırsanız, hata görünür. Yapılacak en iyi şey, projeden kaldırılan sınıfları derleme kaynaklarından (Derleme ayarları -> derleme kaynakları) kaldırmaktır.

Benim durumumda projeye admob sınıflarını ekledim ve projeyi derledim. Daha sonraki bir durumda projeme admob eklemek istemiyorum, bu yüzden projemden admob sınıflarının referanslarını sildim. Bu hata oluştuğunda, admobumun .m sınıfını derleme kaynaklarından sildim, bu sorunu çözdüm.


2

Bu, PSPDFKIT'i kopyalamaya çalışırken başıma geldi demo kitaplığını . Sitedeki tüm talimatları + bu sayfadaki tüm önerileri takip ettim .. nedense yukarıdaki hatayı vermeye devam etti, sorun şu ki, mesajı hata yönteminde büyüttüysem .. sadece ikili dosyada göründü ( açıkçası kaynak koduna erişimim yok, bunun için para ödemem gerekiyor).

Yine de talimat sayfasında bunu fark ettim:

görüntü açıklamasını buraya girin

Ben de o yapılandırma dosyasının derinliklerine gittim ve şunu buldum:

OTHER_LDFLAGS=$(inherited) -ObjC -fobjc-arc -lz -framework CoreText -framework CoreMedia -framework MediaPlayer -framework AVFoundation -framework ImageIO -framework MediaPlayer -framework MessageUI -framework CoreGraphics -framework Foundation -framework QuartzCore -framework AVFoundation -framework CFNetwork -framework MobileCoreServices -framework SystemConfiguration -weak_framework UIKit

Sonra söz konusu kitaplığın yazarının sağladığı örnek projeye gittim .. ve inşa ayarlarımdaki diğer bağlayıcı bayraklarına birebir kopyalandığı önceki bayrakların .. ancak benim projemde .. değiller! .. Yani onları basitçe kopyalayıp projemin yapı ayarlarına yapıştırdım, diğer bağlayıcı bayrakları ve her şey çalıştı!

alınacak nokta: Kurulumunuzda bazı .xcconfig dosyasına güveniyorsanız, örnek bir kod kaynağı veya başka bir şeyle iki kez kontrol edin ve gerçekten uygulandığından emin olun .. benim durumumda doğru şekilde uygulanmadı


0

Bunun olmasının bir başka nedeni de bir SDK'yı YÜKSELTMEKTEDİR.

Yalnızca grubu silip ardından yeni klasörü yansıtmak için sürükleyip bırakırsanız, "Kitaplık Arama Yolu" her iki SDK'ya da sahip olacaktır. Çözmek için eski SDK yolunu silin.


0

Core.Location Framework eklemeden bir CLGeocoder kullanmıştım. Temelde bu hata birden fazla anlama gelebilir. Umarım bunun bir başkasına yardımı olur.


0

Daha önce yalnızca veri içeren bir @ arabirimi eklediğimi ve boş @ uygulama bloğunu eklemeyi unuttuğumu fark etmek için bununla şaşırmıştım.


0

Xcode 11'de bu soruna rastlandı, düzeltme Minimum Dağıtım Hedefini 10.0'dan 11.0'a değiştiriyordu, umarım bu birisine yardımcı olur :)

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.