Derleme Hatası - dosyada gerekli mimari i386 eksik


105

İPhone uygulamamı oluştururken bu hatayı alıyorum:

ld: uyarı: /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS3.1.sdk/System/Library /Frameworks/UIKit.framework/UIKit içinde, dosyada gerekli mimari i386 eksik

Uygulamamdaki tüm çerçeveler için aynı şey geçerli. Bu daha önce olmadığı için çok tuhaf.


Bu, Snow Leopard'ı ve yeni iPhone SDK'yı (Xcode 3.2) yükledikten sonra mı oldu?
avocade

8
Cevabım sorunu çözüyor. Lütfen kontrol edin.
Ürdün

9
Cevaplarda tartışılmayan bir diğer olasılık da, evrensel olmayan bir çerçeveye bir referans eklediyseniz (yani, bir armv6 / armv7 çerçevesi eklediyseniz ve sonra bir simülatör derlemesi yapmaya çalıştıysanız) bu hatayı alacağınızdır. Kendi özel çerçevelerinizi oluşturuyorsanız, bu esas olarak bir endişe kaynağıdır.
aroth

@aroth da haklı, lütfen bu soruyu
ArkReversed

Yanıtlar:


131

Bu, projenize bir çerçeve eklediğinizde ve istemeden çerçeveyi proje dizininize kopyaladığınızda gerçekleşir.

Düzeltme, herhangi bir iphone SDK * .Framework dosyası için proje dizininizi (projenizi diskte depoladığınız yer) kontrol etmek ve bunları silmektir.

Proje daha sonra iyi inşa edecek.


4
ayrıca, Simülatör yerine iOS Cihazında test edin.
Raptor

Başka bir çerçeveniz varsa, o zaman proje dosyasını değiştirmek ona yapılan referansları da
siliyor

Benim için çalışmıyor. Proje dizinimde .framework dosyası yok. Fwiw, bir temizlik yaptım ve sonra bir kurulum yaptım ve bu sorun başladı. Temiz olanın bir şekilde kırılmış şeyleri olmalı.
Alyoshak

85

Aynı sorunu yaşadım ve çözümün kolay bir düzeltme olduğu ortaya çıktı. Yedekleyin ve ardından TextMate veya TextEdit'te project.pbxproj (proje dosyası paketinizin içinde yer alır) açın ve "/ * XCBuildConfiguration bölümünü başlat * /" başlıklı bölümü arayın. FRAMEWORK_SEARCH_PATHS adlı bir anahtarı arayın ve onu ve içeriğini silin (her yapı yapılandırması için bir kez, bu yüzden onu iki yerden kaldırdım). İşte sildiğim şeyin bir örneği:

FRAMEWORK_SEARCH_PATHS = (
"$(inherited)",
"\"$(DEVELOPER_DIR)/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS3.1.sdk/System/Library/Frameworks\"",);

Projem şimdi hem iPhone cihazı hem de iPhone Simülatörü için oluşturuldu.


2
Bunun açıklandığı gibi çalıştığını doğrulayabilirim. Görünüşe göre Xcode, Xcode projeksiyonlarını farklı bilgisayarlar arasında taşırken meta verileriyle kolayca temasa geçebilir; bu durumda bir 3.0 ve Leopard ve diğer 3.1 ve Snow Leopard kurulu. FRAMEWORK_SEARCH_PATHS meta verileri Derleme Ayarlarında boş görünürken, gerçek project.pbxproj dosyasında bazı şeyler bulunur.
avocade

1
Kabul edilen FRAMEWORK_SEARCH_PATHS de benim için derleme ayarlarında boş olarak gösterildi. Ancak, project.pbxproj dosyasını açıklandığı gibi elle düzenlemek sorunu çözdü.
Alasdair Allan

11
Bu benim için işe yaramadı. ANCAK, beni bakmam için doğru yere yönlendiriyorsun. .Pbxproj dosyamda FRAMEWORK_SEARCH_PATHS anahtarı yoktu, ancak LIBRARY_SEARCH_PATHS adlı bir anahtara sahipti.
isyan

Ben @rebellion ikinci. Belki de daha yeni XCode sürümleri anahtar adını değiştirmiştir.
Moshe

Teşekkürler, ayrıca pbxproj dosyamda başıboş bir LIBRARY_SEARCH_PATHS anahtarım vardı. Anahtar, Xcode 3'teki Proje Ayarlarında kalın harflerle göründü, ancak değeri yoktu. Bu, yanlış bir şey olduğuna inanmamı sağladı. Projeyi bir kez Xcode 4 Preview 5'te açtım, ardından bu oldu.
mvexel

43

Burada olan şey, Xcode'un gizemli bir şekilde belirli bir iPhone cihaz SDK'sına işaret eden bir "Çerçeve Arama Yolları" girişi eklemesidir. Örneğin, benimki yakın zamanda şu şekilde ayarlandı:

$(DEVELOPER_DIR)/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS2.2.1.sdk/System/Library/Frameworks

Bu, derleyicinin yanlış mimarinin çerçevelerini bulmasına yol açar. Hedefinizin derleme ayarlarında "Çerçeve Arama Yolları" anahtarı altındaki değerleri kaldırmak sorunu çözecektir.


benim durumumdaki sorun buydu. her yeni kitaplık eklediğimde bir sürü arama dizini eklemişti. Hatta, soruna neden olan arama dizini girişine referansı kaldırsam bile.
darshansonde

Benim durumumda "Çerçeve Arama Yolları" zaten boş. Tam olarak aldığım hata ld: iOS Simülatörü için oluşturma, ancak i386 mimarisi için '/usr/lib/libSystem.B.dylib' MacOSX dosyası için oluşturulmuş dylib'e bağlanma clang: hata: linker komutu çıkış kodu 1 ile başarısız oldu ( Çağrıyı görmek için -v kullanın) Mavericks'te SDK 7.0 kullanıyorum.
Ans

Aynı hatayı aldım, değerleri yapı ayarları altındaki çerçeve arama yolundan kaldırdım ve şimdi başarıyla derliyor.
Nirav

10

Sadece XCode'da "Proje Ayarlarını Düzenle" ye gidip "Arama Yolları" bulursanız "Çerçeve Arama Yolları" için bir alan olduğunu belirtmek istedim. Bunu güncellemek, proje dosyasını kesmek zorunda kalmadan sorunu çözmelidir!

Şerefe!

Jesse


Beni kesinlikle çıldırtan aynı sorunu yaşıyorum. Görünüşe göre çözümü biliyorsunuz ama "project.pbxproj" dosyasını bulamıyorum ve "Proje Ayarlarını Düzenle" nin nerede olduğunu bulamıyorum.
saman01

2
XCode 4.2.1'de bunu şu şekilde buldum: Proje Gezgini'nde proje adına tıklayın. Görünen özellikler ekranında, 'Yapı Ayarları' sekmesini seçin. Arama Yolları bu ekranda yer alır. Onları silmek benim için çalıştı.
dsteele

8

Çerçeveyi eklediğinizde projenize kopyalamadığınızdan emin olun. Kopyaladıysanız, orijinal yolları bulamaz. Bu sorunu çözmek için. AVFoundation çerçevesini projenizdeki çerçeveler klasörünüzden silin, ardından tekrar ekleyin, ancak bu sefer kopya onayınızın işaretlenmediğinden emin olun.

Bu benim için sorunu çözdü!


8

Farklı bir şekilde düzelttim.Bu hatayı almamın nedeni projeme iki kez security.framework eklememdi. Xcode'da security framework göremedim, finder'da projeyi açtım ve bu framework'ü buldum sildim ve sorun çözüldü.


7

Uygulamanız cihazda çalışacaksa, simülatörde çalıştırmaya çalışmadığınızdan emin olun. Bariz gelebilir ama yine de kontrol edin.


5

Bir şeyin silinmiş olması mümkün olsa da, proje dosyasında bir şeylerin ters gittiği benim deneyimim oldu. Bu "bir şey" in ne olduğunu henüz tespit etmedim. SDK kurulumu gayet iyi olduğunda benzer sorunlar yaşadım. Birkaç seçenek var.

Öncelikle, tüm dosyalarınızı yeni bir projeye ekleyin. Bu genellikle işe yarıyor gibi görünüyor. Yine de bir çeşit acı.

İkinci olarak, XCode / Get Info / Build / Library Search Paths'de projeye sağ tıklayabilirsiniz. /Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator3.1.sdk/usr/lib'e benzer yeni yollar ekleyin. Her sürüm (2.2.1, vb.) Ve platform (simülatör veya iPhoneOS) için bu dizenin uygun sürümlerini ekleyin. Probleminiz çerçeveler ise, Çerçeve Arama Yolları için benzer bir eylem gerçekleştirin.

Üçüncüsü, daha fazla iş ancak daha güvenilir olan, project.pbxproj dosyasını MyProject.xcodeproj içinden açmaktır (Textmate bunun için iyidir). "/ * XCBuildConfiguration bölümüne * /", ardından "LIBRARY_SEARCH_PATHS" ve "FRAMEWORK_SEARCH_PATHS" bölümüne bakın. Yolları uygun şekilde ekleyin veya değiştirin ve dosyayı kaydedin.

Her halükarda, popodaki bir ağrı ve sebebini kesin olarak belirlemek isterim çünkü bunu birkaç kez yaşadım. Proje iyi inşa edilir, sonra düzelir ve çok az görünen bir sebeple bunu yapmayı reddeder.


Yeni bir projeye başlayacağım. Oh kuyular.
Gabe Shahbazian

Bir hedefin bilgi panelinden "Çerçeveler Arama Yolları" oluşturma ayarlarını düzeltebilirsiniz.
John Cromartie

Hatayı aldım ancak yukarıda açıklanan çerçeve sorunlarına sahip değildim. İlginç bir şekilde, bir bilgisayarda proje SVN'den kontrol edilebilir ve iyi inşa edilebilirken, diğer iki bilgisayarda aniden her derlemede bu hatayla sonuçlandı. Tek (ve oldukça basit) düzeltme - her türlü başka çözümü denedikten sonra - yeni bir boş proje oluşturmak ve tüm dosyaları içine taşımaktı.
mmattke

Bu yöntem benim için çalıştı. Bir gün tam olarak tek bir konfigürasyon için inşa etmeyi aniden durduran çalışan bir proje setim vardı. Sebep yok. Yukarıdaki textmate tekniğini kullandım ve bu yapılandırmada "$ (SDKROOT) / Developer / Library / Frameworks" ifadesinin eksik olduğunu fark ettim. Neden olduğuna dair hiçbir fikrim yok ve bunu Xcode kullanarak göremedim.
Rob

4

"Proje Ayarlarını Düzenle" ve "Arama Yollarını" bulun "Çerçeve Arama Yolları" için bir alan var. hepsini sil!!


4

Burada benim de başıma geldi. Harika bir ortak sayesinde cevabı bulduk. Xcode'unuz simülatöre işaret ediyor olabilir .. onun yerine bir IOS cihazına değiştirin .. daha sonra pürüzsüz olarak oluşturuldu ....


1

Terminal'den çerçeve üzerinde dosya komutunu çalıştırın :

file /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS3.1.sdk/System/Library /Frameworks/UIKit.framework/UIKit

UIKit ikilisinin hangi mimarilerle uyumlu olduğunu söyleyen bir mesaj almalısınız. Listede "i386" görünmüyorsa, UIKit'in i386 sürümünü bir şekilde kaldırmayı başardınız, bu da simülatör için geliştirme yapamayacağınız anlamına gelir. Bunu düzeltmek için yeniden yüklemeniz gerekir SDK.

Başka bir hata alırsanız, umarım asıl sorunun ne olduğunu anlamanıza yardımcı olur.


SDK'yı yeniden yükledim ve hala aynı yapı hatasını alıyorum.
Gabe Shahbazian

bu problemi yaşıyorum çerçeve ve kütüphane yolunu zaten kontrol ettiler ve temizler. /Developer/Platforms.../UIKit.framework/UIKit komut dosyası sadece "Mach-O dinamik olarak bağlantılı paylaşılan kütüphane kolu" diyor. SDK'nın tamamını kurmak gerçekten gerekli mi? Yoksa çerçevenin tam sürümünü kopyalayabilir miyim?
Alexander Fradiani

Öğrenmek güzel! benim durumum için armv7 ve i386 var, ancak armv6 yok!
Nianliang

1

Sadece şunu bilmenizi isterim ki benim durumumda aynı problemi yaşıyordum, Xcode3.1.3 adında daha eski bir Xcode klasörüm olduğunu fark ettim, sadece eski bir sürüm olduğu için yeniden adlandırdım ve bu benim için sihir yaptı.


1

Hedef ayarlarınızda kütüphane arama yollarınızı kontrol edin. Bazen aptal kitaplıklar buraya girilir ve bu size benzer bir hata verir.

Bu bölümdeki tüm girişleri kaldırabilirsiniz.


0

Biraz farklı bir şey deneyimledim, çünkü kendi kütüphanemde (WM_GSRecognizerLib) çalışıyorum, ancak hata aynı.

Ne oldu: Bazı güncellemeler nedeniyle, dahil edilecek kütüphaneyi (.a) hedefleyen yol "Debug-iphoneos" klasöründen (oluşturulduğu yer) idi. Genel iOS Aygıtları için derleme, eksik i386 mimarisinden şikayet ederek iyi çalıştı, ancak simülatör için işe yaramadı.

Bu sorun için yaptığım şey, "Debug-iphonesimulator" klasöründeki ikili dosyaları da dahil etmekti.

Bu konu için yardımcı olabilir, çünkü açıklama burada: aygıtlar arm64 / armv7 / armv7s için ikili dosyalar gerektirirken, simülatör i386'ya ihtiyaç duyar.


0

Çözümüm simülatör hedef hata ayıklamasını ayarlamaktı YES, sadece .project üzerinde mimari olarak eklenen yeni satırı görmek için git durumuna bakın. bunu ayarlamazsanız, yapı tüm mimarilerde çalışacak ve i386 veya diğerleri gibi bazı eksik mimarileri gösterecektir. NOT: Açıkçası asıl mesele, bir tür özel mimariyi uygulayan bir çerçeve kullanmaktır.


-1

Ben de aynı hatayı xcode sürüm 4.0.2 kullanıyorum, bu yüzden yaptığım şey xcode proje dosyasını seçti ve onlardan Hedef seçeneğini seçtim, projemin uygulamasını görebildim, bu yüzden üzerine tıkladım ve inşa etmeye gittim ayarlar seçeneği.

Arama seçeneğinde Framework arama yolunu yazdım ve tüm ayarları sildim ve ardından inşa düğmesine tıkladım ve bu benim için iyi çalıştı,

Teşekkürler ve saygılar

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.