Mimari arm64 için tanımlanmamış simgeler


200

CocoaPods'tan bir dosya aldığımda her Apple Mach-O Bağlayıcı Hatası alıyorum.

Undefined symbols for architecture arm64:
  "_OBJC_CLASS_$_FBSession", referenced from: someFile
ld: symbol(s) not found for architecture arm64

Kullandığım çeşitli Pod'lar için bunlardan yaklaşık 12 tane alıyorum.

XCode 5 kullanarak iPhone 5S için inşa etmeye çalışıyorum.

Burada SO üzerinde çeşitli çözümler deniyorum, ancak henüz çalışacak hiçbir çözüm yok.

Bu Apple Mach-O Bağlayıcı Hatası nasıl düzeltebilirim?


İlginç olabilecek başka bir uyarı daha buldum, umarım bu beni çözüme götürür:

Ignoring file ~/Library/Developer/Xcode/DerivedData/SomeApp/Build/Products/Debug-iphoneos/libPods.a, 

file was built for archive which is not the architecture being linked (arm64):~/Library/Developer/Xcode/DerivedData/someApp/Build/Products/Debug-iphoneos/libPods.a


Basit Çözüm Hedef -> Bağlama -> diğer bağlayıcı Bayrağına gidin ve hem Hata Ayıklama hem de Serbest Bırakma'daki diğer bağlayıcı bayrağına $ (devralınmış) ekleyin.
Mihir Oza

Yanıtlar:


248

Senin Eğer Mimarileri ve geçerli Mimarileri misin, sen eklenmiş olup olmadığını kontrol edebilir $(inherited)etmek, bakla üretilen bağlayıcı bayrakları ekleyecek olan diğer Bağlayıcı Flags aşağıdaki gibi: resim açıklamasını buraya girin


7
@chancyWu Açıklayabilir misiniz?
Paul Brewczynski

5
ayrıca bu hala çalışmazsa, Kütüphane Arama Yollarına da @ (devralınan) öğesini ekleyin.
Enrico Susatyo

1
Lol, Use the $(inherited) flagterminal uyarısı yoksayıldı . Ve hata beni buraya getirdi. günümü kurtardım.
Sushil Sharma

2
Xcode 7.2 ile çalışıyorum ve Diğer Bağlayıcı Bayrakları -> Hata ayıklama görüyorum: -weak_framework CoreFoundation -weak_framework UIKit -weak_framework AVFoundation -weak_framework CoreMedia-zayıf-lSystem -ObjC ... burada $ (devralınmış) ekledim ama yok t çalışma
Alessandra

Çok zamanımı kazandın. Teşekkürler.
Nirmalsinh

123

Sorun, kokoodların arm64 mimarisi için inşa edilmemiş olması, ancak bunları oluşturduğunuzda bağlanamayacaklarıdır. Güncelleştirilinceye ve bu mimariyi kullanana kadar bu paketleri kullanamazsınız. Bağlayıcı hatasını, -> target (proje adınız) -> ayarları oluştur ve mimarileri standart mimarilere (armv7, armv7s) ve geçerli mimarileri armv7, armv7s olarak değiştirerek giderebilirsiniz.

Bununla birlikte, 64 bit işlemcinin tam gücünü elde edemeyeceğiniz anlamına gelir. 5'ler için inşa ettiğinizi söylediniz, bu yüzden buna ihtiyacınız olabilir. Herhangi bir nedenden dolayı kesinlikle bu güce ihtiyacınız varsa (belki de bir oyun inşa ediyorsunuz) ve umutsuzca bu dosyalara ihtiyacınız varsa, bir çekme isteği gönderebilir ve daha sonra çektiğiniz dosyalarda aynı alanları arm64'e ayarlayarak projeyi arm64'e yeniden derleyebilirsiniz. açık kaynak projeleri. Ancak, bu dosyaların gerçekten 64 bit uyumlu olması gerekmedikçe, şimdilik biraz abartılı gibi görünüyor.

EDIT: Bazı insanlar da bu sorunu çözmek için Aktif Mimariler için Build EVET ayarının gerekli olduğunu bildirdi.

2014-04-28 itibariyle ortam aşağıdaki gibi görünmelidir:

resim açıklamasını buraya girin


4
Bu, simülatörde çalıştırmak için hatayı çözdü, ancak cihazda çalıştırma hatasını çözmedi. Podlar libPods.a için reddedildi çünkü mimarileri '' (bir nedenden dolayı, onu tespit etmiyor
Xcode'da

7
Tamam, Aktif Mimarileri Oluştur seçeneğini Evet olarak ayarlayarak anladım. Çok teşekkür ederim!
GangstaGraham

2
Kenara: filestatik kütüphanenin hangi mimarileri desteklediğini söylemek için Terminal'deki komutu kullanabilirsiniz .
funroll

8
Koroya eklemek için buraya geldim: AKTİF MİMARLAR İÇİN OLUŞTUR için EVET'i seçmek burada en iyi seçenektir.
Wells

56
Bu artık bir çözüm değil. Apple şimdi tüm dağıtımlar için 64 bit destek istiyor.

52

Bu sorunu ayarlayarak çözdüm:

ARCHS = armv7 armv7s

VALID_ARCHS = armv6 armv7 armv7s arm64


1
XCode 5.1'i ilk kez kullanırken benzer bir sorun yaşadım, bu düzeltildi. Teşekkürler!
GangstaGraham

@morisunshine emin misiniz, inşa ettikten sonra ikili mimarileri kontrol ettiniz mi?
onmyway133

@ onmyway133 Kontrol ettim, ancak şimdi bu sorunu yeni XCode'da karşılamadım.
morisunshine

@morisunshine evet, yani kolunu kaybettin64
onmyway133

Artık yapı hatası yok, bu noktaya kadar sorun yok. Ancak arşivlenen derleme yüklenirken, arm64 bit desteği 1 Şubat 2015'ten itibaren bir zorlama olduğu için arm64 bit eksik hatası alıyorum.
Zeeawan

45

Aynı / benzer bir sorunla karşılaştım AVPictureInPictureControllerve sorun, projemde AVKit çerçevesini bağlamamıştım .

Hata mesajı:

Undefined symbols for architecture armv7:
   "_OBJC_CLASS_$_AVPictureInPictureController", referenced from:
       objc-class-ref in yourTarget.a(yourObject.o)
ld: symbol(s) not found for architecture armv7
clang: error: linker command failed with exit code 1 (use -v to see invocation)

Çözüm:

  1. Senin git Projesi
  2. Hedefinizi seçin
  3. Ardından, Aşamaları Oluştur'a gidin
  4. Kütüphanelerle Açık Bağlantı İkili
  5. Son olarak, sadece eklemek + AVKit çerçevesini / başka bir çerçeve .

Umarım bu da benzer bir sorunla karşılaşan başka birine yardımcı olur.


6
Evet, bunun bir çerçeveyi kaçırırsanız atılan bir hata olduğunu belirtmek gerekir. Bir ipucu mimarileri kaldırmayı dener ve bir sonraki / kalan da başarısız olur ...
Kristen Waite

1
aferin. `` _OBJC_CLASS _ $ _ XXXXXClass ", kaynak:` `xxx Çerçeve ekleyin.
iHTCboy

Bulun! Basılı 'xml' yazılı bir şey gören herkes bunu kontrol eder - benim durumumda 'libxml' çerçevesi bağlı değildi.
Evusas

Kapsülün girişini değiştirdikten sonra, bu hata oluştu ve tüm yöntemler düzeltilmedi. Ancak yönteminiz sorunu çözer. Not: lib aranamaz.
stellar lee

33

Aynı problemle de karşılaştım, yukarıdaki yöntemler işe yaramayacak. Aşağıdaki dizindeki dosyaları yanlışlıkla sildim.

Klasör yerleştirme:

~ / Library / Geliştirici / Xcode / DerivedData /

resim açıklamasını buraya girin


3
Bu garip gelebilir, bu gerçekten işe yaradı. Teşekkürler dostum.
Felipe

2
Elde edilen verileri manuel olarak silmek, benim için hile yaptı. Şerefe!
L_Sonic

7
Teşekkür ederim! Bir ipucu eklemek istiyorum: klasör / Kullanıcı / adınız / Kütüphane / Geliştirici / XCode / DerivedData
Stefano Buora

Ayrıca, terminali kullanarak türetilmiş verileri silebilirsiniz: rm -rf ~ / Library / Developer / Xcode / DerivedData
simon_smiley

Zamanımı kurtardım ... XDDD
Hsiao-Ting

25

Set Mimarileri için ARMv7 armv7s , Sadece Etkin Architecture kurmak için NO dahil projede her hedef için, her birinde de Pods


Sorta çalıştı ... Şimdi "Geçersiz bit kodu imzası" hatası alıyorum.
JeremyF

18

Sağ taraftaki hedef üyelikte seçilen uygulama dosyalarını kontrol ederek madeni düzelttim. Bu, özellikle özel klavyeler gibi uzantılarla uğraşırken kullanışlıdır.

Hedef Üyelik


Xcode 9, onay kutusunu işaretlese bile bunu otomatik olarak uygulamaz. Teşekkür ederim.
Amro Shafie

Sorun buydu. Teşekkür
Ignacio Hernández

11

Neden build_active_architectureNO olarak ayarlandığına dair bazı açıklamalar . Xcode şimdi hangi aygıtları bağladığınızı algılar ve etkin mimariyi buna göre ayarlar. Dolayısıyla, bilgisayarınıza ikinci nesil bir iPod Touch bağlarsanız, Xcode aktif mimariyi armv6 olarak ayarlamalıdır. Yukarıdaki Hata Ayıklama yapılandırması ile hedefinizi oluşturmak artık sadece zaman kazanmak için armv6 ikili dosyasını oluşturacaktır (büyük bir projeniz yoksa farkı fark etmeyebilirsiniz, ancak sanırım saniye içinde toplanır).

App Store'da yayınlamak için bir Dağıtım yapılandırması oluşturduğunuzda, bu seçeneğin ayarlanmadığından emin olmalısınız, böylece Xcode bunun yerine yağ evrensel ikili dosyasını oluşturur http://useyourloaf.com/blog/2010/04/21/xcode -build-etken mimarisi only.html


Bu inanılmaz derecede FUBAR! XCode çıkışı, derleme makinesine hangi cihazı bağladığınıza bağlıdır!
Matt

6

Sadece kaldırmak gerekir arm64 gelen geçerlidir Mimarlık ve set HAYIR için Sadece Etkin Mimarlık . Şimdi sadece temizleyin, inşa edin ve çalıştırın. Bu hatayı bir daha görmeyeceksiniz.

:) KP


5

DerivedData -> Derleme -> Ürünler -> Hata Ayıklama-iphoneos içeriğini sildikten sonra çözüldü


4

Bu, ilişkili ikili dosyalar için hedeflerinizle ilgili olabilir libz.dylibveya libz.tbdbunları eklemeniz ve tekrar derlemeye çalışmanız olabilir.


Tesseract çerçevesini eklemeye çalışıyordu ve sadece bu bana yardımcı oldu, teşekkürler. !
HelloimDarius

3

Armv7 armv7'lere geçerli arklar ayarlayarak ve aktif mimarileri yalnızca sürümde EVET olarak ayarlayıp komut satırından yeni bir "pod kurulumu" yaparak çözdüm


3

Bir iPhone 5s göz önüne alındığında ve henüz bir üçüncü taraf kütüphanesinin 64 bit sürümünü almadıysa, en son Xcode ile 32 bit moduna geri dönmek zorunda kaldım (5.1'den önce şikayet etmedi).

Bunu, Arm64'ü Geçerli Mimariler listesinden silerek ve ardından Yalnızca Etkin Mimari Oluştur'u HAYIR olarak ayarlayarak düzelttim. Bana göre bu, yukarıda gösterildiği gibi, diğer yönden daha mantıklı. Başkalarının onlar için çalışmak için yukarıdaki çözümlerden hiçbirini alamaması durumunda gönderiyorum.


3

Xcode 5.1 yükseltme sonrasında aynı problem vardı ve ayarlayarak düzelttim Architectures'ı için ARMv7 armv7s


3

Bütün gün bu konuda sıkışmıştı.

Birden çok Düzen vardı, Demo, Internal, Release için iyi derleme - Ancak Debug düzeni sadece derlemek olmaz ve libPods.a eksik hakkında şikayet ediyordu.

Çözüm, Proje -> Hedef -> Derleme Ayarları'na gitmek ve "Yalnızca Aktif Mimari Oluştur" seçeneğini EVET olarak değiştirmekti. Temizleyin ve inşa edin! Sonunda saatlerce kaşıntı çözüldü!


Sizinle tam olarak aynı sorun değil, benzer. Verdiğiniz yöntemle çözdüm.
Helzgate

2

Ayar -ObjCiçin Other Linker Flagshedefin Yapı Ayarlarında sorunu çözdü.


2

Bu benim için çalıştı:

ios sdk 9.3

app.xcodeproj geçerli mimari oluşturma ayarınıza : armv7 armv7s Build Aktif mimari: Hayır

Temizleyin ve inşa edin, benim için çalıştı.


1

Aşağıdakiler benim için 64-bit simülatör ve retina iPad Mini için Xcode 5.1'de hatasız derleme GPUImage derlemeyi elde etmek için çalıştı, arm64'ü Geçerli Mimariler listesinden kaldırmaya gerek kalmadan (test için 64 bitlik bir aygıta sahip olma amacını ortadan kaldırıyor) 64 bit performans).

GitHub sayfasından .zip klasörünü indirin: https://github.com/BradLarson/GPUImage

Sıkıştırın ve 'çerçeve' klasörüne gidin. Buradan, 'Kaynak' klasörünü ekleyin ve Xcode projenize kopyalayın. 'Öğeleri hedef grubun klasörüne kopyala' seçeneğinin ve 'Eklenen klasörler için grup oluştur' seçeneğinin işaretli olduğundan emin olun. Bu, genel, iOS ve Mac üstbilgi / uygulama dosyalarını projenize kopyalar.

İOS için derlediğiniz için Mac dosyalarına ihtiyacınız yoksa, dosyaları projenize kopyalamadan önce Mac klasörünü silebilir veya grubu Xcode içinden silebilirsiniz.

Kaynak klasörü projenize ekledikten sonra GPUImage'ın sınıflarını / yöntemlerini kullanmaya başlamak için aşağıdakileri kullanın:

#import "Source/GPUImage.h" 

Dikkat edilmesi gereken birkaç nokta:

  • 'Kakao' bulunamadı ifadesini alırsanız, iOS projenize Mac klasörünü / başlıklarını eklediniz - Mac grubunu / dosyalarını projenizden silmeniz yeterlidir ve uyarı kaybolur
  • Kaynak klasörü yeniden adlandırırsanız (Xcode'daki grubu değil), #import komutunda "Source / GPUImage.h" yerine bu adı kullanın. Projenize eklemeden önce klasörü GPUImageFiles olarak yeniden adlandırırsanız, şunu kullanın: #import "GPUImageFiles / GPUImage.h
  • Açıkça arm7'nin A7 64 bit işlemciden yararlanmak için Geçerli Mimariler listesinde seçildiğinden emin olun!
  • Bu bir GPUImage.framework paketi değildir (çerçeveyi http://www.raywenderlich.com/60968/ios-7-blur-effects-gpuimage adresinden indirdiğiniz gibi ), bu nedenle GPUImage'ı kullanmanın doğru yolu olmayabilir Brad Larson'ın istediği, ama şu anki SpriteKit projem için çalışıyor.
  • Çerçevelere / kitaplıklara vb. Bağlanmaya gerek yoktur - sadece yukarıda açıklandığı gibi başlık ve uygulama kaynak klasörünü içe aktarın

Yukarıda umarım yardımcı olur - birden fazla soru sorulmasına rağmen hiçbir yerde net talimatlar yok gibi görünüyor, ama korkmayın, GPUImage kesinlikle arm64 mimarisi için çalışıyor!


1

Podfile ve aracılığıyla bir bölme yükledikten sonra bu sorun benim için oluştu pod install. Bir sürü farklı düzeltmeyi denedikten sonra nihayet Pod'u manuel olarak içe aktardım (gerekli dosyaları projeme sürükleyerek) ve bu sorunu çözdü.


o da benim için çalıştı ama bir dosya ile kolay bir bakla oldu.
iluvatar_GR

1

As morisunshine cevap doğru yöne, onun cevabını biraz çimdik kendisine iOS8.2 .thanks benim sorun çözüldü.

Bu sorunu ayarlayarak çözdüm:

ARCHS = armv7

VALID_ARCHS = armv6 armv7 armv7s arm64

BUILD ACTIVE ARCHITECTURE ONLY= NO

1
  1. Hedef Oluşturma Ayarlarına gidin.
  2. SADECE OLUŞTUR AKTİF MİMAR ayarla = HATA ve Hata Ayıklama için HAYIR
  3. İnşa et ve çalıştır

3
PODS projesinde
Elad


1

Benim için iOS için xcode 7.2'de opencv 2.4.9 kullanıyorum ve yukarıdaki hatalar oluştu ve hataları opencv'i çevrimdışı opencv çerçevesi yerine pod yüklemesi ile kullanarak çözüyorum.

Aşağıdaki opencv pod metnini ekleyerek bir deneme yapabilirsiniz ve kullandıysanız çevrimdışı opencv çerçevesini silebilirsiniz.

'OpenCV' bölmesi, '2.4.9'


1

Hiçbir çözüm benim durumumda (Xcode 9) bu hatayı düzeltir TesseractOCRiOS. Saatlerce süren deneme yanılma sonrasında iyi bir çözüm buldum. Sadece silmek 'pod 'TesseractOCRiOS', '~> 4.0.0'içinde Podfileçalıştırın pod install. Ve sonra, eklemek pod 'TesseractOCRiOS', '~> 4.0.0'geri Podfileve koşmak pod installtekrar.

Bang! İşe yarıyor!


1

"OPN [Hata Ayıklama] hedefi OTHER_LDFLAGS oluşturma ayarını geçersiz kılar". Asıl mesele buydu. Diğer linker bayraklarında yeni satırda $ (devralındı) ekledikten sonra sorunumu çözdüm. resim açıklamasını buraya girin


1

bazı durumlarda, bir .h dosyasında bir arabirim daha tanımlarsanız, ancak tüm bu arabirimi uygulamadıysanız, bu hata oluştu.

Bağlayıcı, uygulamayı .m dosyasında bulamaz, bu nedenle her arabirim için .m dosyanızda uygulamanız gerekir.

Bu hatayı gidermek için:

1. .m dosyasında, her arabirim için uygulamayı sağlayın. 2.rebuild



0

Bu sorunun üstesinden gelmek için AWS çerçevesini yükledikten sonra aynı sorunla karşılaştım, AWS POD'u yükledikten sonra oluşturulan projenizden POD yapılandırma dosyasını güncelledim. Yapılandırma dosyasını aşağıdaki gibi kontrol edin

OTHER_LDFLAGS = $(inherited) -ObjC -l"Pods-AWSAutoScaling" -l"
Pods-   AWSCloudWatch" -l"Pods-AWSCognito" -l"Pods-AWSCore" -l
"Pods-AWSDynamoDB" -l"Pods-AWSEC2" -l"Pods-AWSElasticLoadBalancing" 
-l"Pods-AWSKinesis" -l"Pods-AWSLambda" -l"Pods-AWSMachineLearning" 
-l"Pods-AWSS3" -l"Pods-AWSSES" -l"Pods-AWSSNS" -l"
Pods-AWSSQS"-l "Pods-AWSSimpleDB" -l"Pods-Bolts" -l"Pods-FMDB" 
-l"Pods-GZIP" -l"Pods-Mantle" -l"Pods-Reachability" -l"Pods-TMCache" 
-l"Pods-UICKeyChainStore" -l"Pods-XMLDictionary" -l"sqlite3" -l
"z"-framework "Accelerate" -framework "AssetsLibrary" 
-framework "CoreLocation" -framework "Foundation" -framework
"ImageIO" -framework "Security" -framework "SystemConfiguration"
-framework "UIKit" -weak_framework "UIKit"
 OTHER_LIBTOOLFLAGS = $(OTHER_LDFLAGS)   

yapılandırma dosyanız düzgün çalışmıyorsa Diğer Bağlayıcı bayrağınızı $ (devralınmış) olarak ayarlayın


0

Mimari ve bağlayıcı ayarları iyi görünüyorsa, h dosyalarınızı kontrol edin. Sorunum aynı hataydı, ancak h dosyalarını yeniden yapılandırdım ve bir extern deyimini kaldırdım. Diğer m dosyaları bu değişkeni kullanarak bağlayıcı hatasına neden oldu.


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.