İ386 mimarisi için tanımlanmamış simgeler: _OBJC_CLASS _ $ _ SKPSMTPMessage ", başvurulan: hata


236

Ben arka plan yani SKPSMTPMessageFramework uygulamadan e-posta göndermek için çerçeve ithal var . Birisi aşağıdaki hatanın neden gösterildiğini önerebilir mi?

Undefined symbols for architecture i386:

"_OBJC_CLASS_$_SKPSMTPMessage", referenced from:
  objc-class-ref in ConfirmController.o

"_kSKPSMTPPartContentTransferEncodingKey", referenced from:
  -[ConfirmController sendEmail] in ConfirmController.o

"_kSKPSMTPPartMessageKey", referenced from:
  -[ConfirmController sendEmail] in ConfirmController.o

"_kSKPSMTPPartContentTypeKey", referenced from:
  -[ConfirmController sendEmail] in ConfirmController.o

ld: symbol(s) not found for architecture i386
collect2: ld returned 1 exit status

Çerçevenin alındığı kaynak: -

MFMailComposeViewController'daki Alanları Kilitleme

Güncelleme :

Cevap: Klasörü projenin üzerine sürükleyip bırakın ve kopyala'yı tıklayın. Bu proje onay kutusunu ve hedef onay kutusunu da seçer.


Ekledikten sonra SystemConfiguration.framework gelen yapı fazları projemin de derler
swiftBoy

Bu sorunu Çözdüm.İkili Kütüphanelere Bağlamak için gerekli çerçeveyi ekledim.
Mihir Oza

Yanıtlar:


569

Sınıfınızın .m dosyası hedefinizin "Derleme Aşamaları" sekmesinin "Derleme Kaynakları" adımında listelenmemişse bu tür bir hata alabilirsiniz. Normalde Xcode bunu sizin için yapar, ancak bazen çizimi kaybeder ve .m dosyasını manuel olarak eklemeniz gerekir.

Bunu yapmak için:

TargetSettings -> Derleme Aşamaları -> Derleme Kaynakları -> .m sınıfınızı ekleyin -> Derleme ve Çalıştırma


49
Bazen bu hatalar, bazı çerçevelerin düzgün bağlanmadığı için ortaya çıkar. Projenin derleme aşaması sekmesindeki "İkili Kitaplıklarıyla Bağla" daki tüm çerçeveleri kontrol etmeniz yeterlidir.
Heitara

Bu, .c dosyalarıyla ve muhtemelen .mm'de de olabilir.
brodney

Rajneesh, sorunu çözdün mü? Evet ise, nasıl düzelttiniz?
codematrix

9
Sağ panel "Hedef Üyelik" bölümünde .m dosyasını seçip hedefinizin yanındaki kutuyu işaretleyebileceğinizi belirtmek gerekir. Projenize bir dosya eklediğinizde, "Hedeflere ekle:" yapmak isteyip istemediğiniz sorulur, hayır demiş olabilirsiniz, ancak söylediğimi yaparak istediğiniz zaman ekleyebilirsiniz.
Nicolas S

4
Aynı hatayı alırdım, benim için çözüm: Yapı Ayarı -> Bağlama -> Diğer Bağlayıcı Bayrakları -> Hata Ayıklama-lLibraryName_$(PLATFORM_NAME)d için Ekle ve Bırakma için Ekle-lLibraryName_$(PLATFORM_NAME)
George

37

benim için sorunun eksik çerçeveler olduğu ortaya çıktı. Onları ekledikten sonra işe yaradı.


Gerçekten aldığım hata mesajlarıyla eşleşmediği ama SocketRocket sitesinde önerilen bağımlı çerçeveleri eklediğim için bu uzun bir atış gibi görünüyordu benim için de düzeltildi.
Pat

Koapapodlarla çerçeve ekleseniz bile bu olabilir. Ben de bir çerçeve olarak el ile eklemek zorunda kaldı. Teşekkürler!
FBente

Eklediğim Çerçeve, oluşturulmadan önce başka Çerçeveler eklenmesini gerektiriyordu. Bir Çerçeve ekliyorsanız, ihtiyaç duyabileceği herhangi bir Çerçeve eklediğinizden emin olun
Dave Patrick

29

Sadece Geçerli Mimariler & Build Active Architecture özelliklerini kontrol edin.

enter image description here


1
lütfen bana bu seçenek penceresini Xcode 4.2'de nasıl açacağınızı söyleyebilir misiniz
Anand

Bu işe yaramazsa, aşağıdaki Allen Pike'ın cevabına bakın.
MattyG

Hem bu cevap hem de Allen'ın yanıtı bana yardımcı oldu. Gerçekten her iki şeyi de kontrol etmek zorunda kaldım: Kaynakları Derle ve Yalnızca Aktif Mimari Oluştur. Çok teşekkürler çocuklar!
Bogdan

@Anand Hedef için Oluşturma Ayarlarındalar.
lifelogger

18

Eğer cocoapods yapmak kullanıyorsanız emin hedefin inşa ayarları içeriyor $ (kalıtsal) içinde diğer bağlayıcı bayrakları bölümünde

resim açıklamasını buraya girin


10

Çerçeveniz armv (x) için derlenmiş mi? Bana, i386 için derlenmiş gibi görünüyor, hangi kod bir iOS cihazında çalışmaz. Yoksa armv (x) için derlenmiştir ve simülatörde çalıştırmaya çalışıyorsunuz, yani i386 kodu. Yukarıda gösterilen Akshay ayarlarını kullanarak, çerçevenizin üzerinde çalıştıracağınız çip için doğru derlendiğinden emin olun.


Sıralanmıştır. Ben sadece xCode benim proje forlder çerçeve forlder sürükleyip bırakmak zorunda kaldı. Teşekkürler
Mann

hem iOS cihazında hem de simülatörde aynı anda çalışacak bir çerçeveyi bir şekilde derlemek mümkün müdür? ya da her zaman sadece bir seçenek seçmeli miyim?
Aleksey Tsyss

Aynı projeye iki pencere açmak ve birini simülatörde ve diğerini cihazda çalıştırmak için mi ayarlıyorsunuz?
Owen Hartnett

7

Xcode içinde başka bir projeyi içe aktarırsanız ve geçerli ve içe aktarılan projenin her ikisi de Derleyici kaynağında aynı dosyalara sahipse, "Derleme aşaması" ayarlarındaki geçerli projedeki aynı dosyayı kaldırmanız yeterlidir.


4

Evet bu allen'ın söyledikleriyle ilgilidir ... Kaynak dosyanın Yardımcı Programlar bölümünde TargetMembership'i arayın. bu dosyayı bir projeyle ilişkilendiren bir onay kutusu vardır. Bunu kontrol etmek benim için de bu sorunu çözdü.


Diğer tüm ayarları değiştirdim, ama sonunda benim için düzeltti. Teşekkürler!
Alec Thomas

4

Ayrıca bir İkili Kütüphane ile bağlantı kuramıyorsunuz, Hedeflerinizdeki Derleme Aşamaları'nı işaretleyerek gerekli kütüphaneleri ekleyin ve ardından Ürün> Ürünü Temizle> Oluştur

Bu da işe yaramalı!


4

Aynı projeyi iki kez açtığımda bu sorunu yaşadım, sadece bir proje orijinaldi ve diğeri git url'den klonlandı.

'Ürün'> 'Temiz' sorunu çözdü.


4

Ben de bu sorunu bir araya geldi ve ben kaynak derlemek kaynak ve bağlantı ikili kütüphane ile gerekli tüm dosya / kütüphane / çerçeve içerip içermediğini kontrol ederek düzeltildi.

resim açıklamasını buraya girin


4

Aynı sorunla karşılaştığımda:

İ386 mimarisi için tanımlanmamış semboller:

_OBJC_CLASS _ $ _ SKPSMTPMessage, başvurulan: objc-class-ref in ConfirmController.o

Çerçeve eklemeyi unuttuğum ortaya çıktı. Tam olarak QuartzCore.framework.


@JayprakashDubey Mitch'e sorun
D_D

4

bunu son olarak dene:

Ben hiçbiri çalıştı .. Bu sayfadaki tüm önerileri çalıştı yüzden .. benim problem başlamış yolu adımları izleyerek oldu bu derste statik kütüphanelerin nasıl bağlanacağını öğreten izlemektir. Örnek projemde talimatlar iyi çalıştı ... ama sonra gerçek projemde yukarıdaki hatayı almaya başladım.

Yani yaptığım öğretici her adımdan geçmek ve her adımdan sonra inşa oldu .. rahatsız edici çizgi bu olduğu ortaya çıktı: ayarları oluşturmak için -all_load ekleyerek-> diğer bağlayıcı bayrakları

kategorilerin statik kütüphanelere bağlanması için bir zamanlar bu bayrağın önerildiği ortaya çıktı ... ama sonra bu bayrağın artık Xcode 4.2+ gerekmediği ortaya çıktı .. (aynı şey -force_load bayrağı için de geçerli .. diğer yayınlarda önerilir ) ..


3

Aynı sorunla karşılaştığımda, "derlenmiş kitaplık sürümü (.a uzantılı)" eklemeyi unuttum. Normalde, içe aktarılan projenin kütüphanesini Derleme Aşamalarında Hedef Bağımlılığa ekleriz, ancak Derleme Süreci'nde Derleme ile İkili Kitaplığı Derleme'ye eklemeyi unuturuz.


3

Başkalarının da aynı sorunu yaşamaları ve benim için burada olmaları durumunda benim için işe yarayanları eklemek. CLANG_ENABLE_MODULES ayarı Hayır olarak ayarlanmış daha eski bir projem vardı. Saatler süren hayal kırıklığından sonra çalışan bir projeyle karşılaştırdım ve LLVM oluşturma ayarlarım altında Modülleri Ayarlamayı Etkinleştir ayarını buldum. Bunu Evet olarak ayarlamak sorunumu çözdü ve uygulama iyi çalışıyor.

Proje Ayarları -> Derleme Ayarları -> 'Modüller' için arama yapın ve Etkinleştirme Modüllerini (C ve Objektif-C) EVET olarak güncelleyin.


Harika düzeltme! Bu bana çok yardımcı oldu! Eski bir kapsül projem vardı ve her yeni kapsül eklediğimde bu hata oluşacaktı. Teşekkürler!!!
DiscDev

2

"-All_load -lstdc ++" derleme ayarında Diğer Linker Bayrakları eklemedi ve sim hatasız başlatmak başardı ama ben başlatıldığında MonkeyTalk günlük çıktı alamadım ve bağlanmak için kullanılan bir önceki komut dosyası şimdi oynat düğmesini devre dışı olarak gösterdi. MT IDE çıkışı "iOS Simulator'a bağlandı" olarak gösterildi, ancak çalıştır / oynat düğmesini seçemedi.

Özgün proje Diğer Bağlayıcı Bayrakları "ObjC -all_load" vardı ve ben onunla birlikte "-all_load -lstdc ++" ekledi zaman bu yazı hakkında hata iletisi aldım. Ben "ObjC -all_load" kaldırıldı ve sadece inşa proje "-all_load -lstdc ++" ekledi, ama yine de hiçbir maymun konuşma çıkış konsolda onay olarak koymak


2

Yalnızca REAL donanımı için derlenmiş bir kitaplık kullanmanız mümkündür. Örneğin, Zephyr HxM Smart gibi bir Bluetooth kütüphanesi kullanıyorsanız, muhtemelen simülatörde derlenmeyecektir ve sadece gerçek cihazlarda çalışması amaçlanmıştır.


1

IOS 6 ile benzer bir sorunla karşılaştım. İnşa aşamaları bölümündeki "Kütüphanelerle İkili Bağla" ya storekit.framework ekleyerek çözebildim.

Şimdi, bir cazibe gibi çalışıyor.


1

i PSTCollectionviewcontroller eklediğinizde 7 hata ile aynı sorunu var. Bu sorunun bir çözümü "xcode -> yapı aşamaları -> kaynakları derlemek" burada tüm ".m" dosyaları eklemek olduğunu .. Umarım bu gönderisi gelecekte kullanıcılara yardımcı olacaktır.


1

Benimkinde, Artırılmış Gerçeklik projesi için Cocoapods kullanıyordum ve bulduğum şey, cocoapod'ları uygulayıp projenizin .workspace'ini açtığınızda, Xcode Project hedefini ve aynı dosyada uyguladığınız Pod'ları hedeflemenizdi. Olan şey, .m'nin bir kısmının her ikisi tarafından kullanılmasıydı. Derleme Aşamaları >> Derleme Kaynakları'ndaki Xcode hedefi için çoğaltılanları kaldırdıktan sonra, iyi çalıştı.


1

Yeni Google Analytics kitaplığına geçmeye çalışırken bu HASSLY yanıltıcı mesajı keşfettim.

Benim durumumda sorun İKİ ÇATIŞMA KOPYASI olmasıydı kütüphanenin . Farklı klasörlerde bulundular, ancak her ikisi de Uygulamamın Kütüphane Oluşturma Yolları'nda (Oluşturma Ayarları altında) listeleniyordu.

Kullanımdan kaldırılmış tüm kütüphane dosyalarını klasörden çıkarmak, hile yaparak sonuçlandı ve gizemli hata mesajlarını ortadan kaldırdı.


1

Tüm paket kaynaklarınızın derleme aşamasında kopyalandığından emin olun.



1

Aktif mimari değişim benim için çalıştı, benim lib biri i386 kullanıyordu.

In oluşturma ayarlarını >> değişim Sadece Yapı Aktif Mimarlık için Evet NO

Benim için çalıştı. Umarım başkalarına da yardımcı olur.

resim açıklamasını buraya girin


"HAYIR'dan EVET'e" anlaşılması daha kolaydır. Her neyse, bu işe yaradı.
Victor Laerte

0

Cevap, klasörü projenin üzerine sürükleyip bırakmanız ve kopyalamanızdır.


0

Başka bir projeden bazı kaynak dosyaları sürükleyip bıraktığımda bu mesajı aldım. Onları sildiğimde ve sonra Dosya menüsünden "Dosya Ekle ..." aracılığıyla eklediğimde, hata olmadan oluşturuldu.


0

NSManagedObject ile benzer bir hatayla karşılaştım ve bunun nedeni Çekirdek Verileri kullanıyordum, ancak bazılarının cevapladığı gibi Yapım Aşamaları - Bağlantı İkili Kitaplıkları'nda Temel Veri çerçevesinin eksik olmasıydı.


SO Sam'e hoş geldiniz. Bir soruyu cevaplarken, başka bir cevapta henüz mevcut olmayan yeni bilgiler, araştırmalar veya kodlar eklemeyi deneyin. Başka bir yanıtın sizin için işe yaradığını paylaşmak istiyorsanız, yinelenen bir yanıt göndermek yerine cevabını yükseltmeyi veya yorum yapmayı deneyin.
butch

0

Projenize, projenize dahil edilmeyen yerel çerçeveler gerektiren üçüncü taraf kitaplıkları eklerseniz bu tür bir hata alabilirsiniz.

Yeni eklenen kitaplığınızın .h ve .m dosyalarına bakmanız ve hangi çerçeveleri gerektirdiğini görmeniz, ardından bu çerçeveleri projenize eklemeniz gerekir (Hedef> Derleme Aşamaları> İkili Kitaplıklarıyla Bağla).


0

Çerçeveyi kaldırmayı deneyin, projeyi temizleyin, geri ekleyin ve derleyin. Veya derleme kaynağında xcode tarafından eklenen sınıfı kaldırın, projeyi temizleyin, geri ekleyin ve ardından derleyin.


0

Daha önce sildiğiniz dosyaları çağıran herhangi bir görünüm denetleyicisine bir makro koyabileceğinizi unutmayın.

Uygulama, uygulamanızı oluşturana kadar herhangi bir hata göstermez, hatayı .o dosyalarına derleme aşamasında atar.

Daha önce sildiğiniz dosyaları çağıran tüm MACRO'ları silmeyi unutmayın.

Teşekkürler :)


0

Allan'ın yaptıklarına ek olarak, eksik sınıflar ekleyerek, @ emdog4'ün çözümünü izledim ve Xcode'da Fazlar Oluştur'a ve + 'yı tıklayıp' CoreData.framework 'seçeneğini seçerek' Kütüphanelerle İkili Kütüphaneyi Bağla 'altına Temel Veri kütüphanesini ekledim . Bu benim hatamı çözdü

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.