Simbol yang tidak terdefinisi untuk lengan arsitektur64

200

Saya mendapatkan Kesalahan Apple Mach-O Linker setiap kali saya mengimpor file dari CocoaPods.

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

Saya mendapatkan sekitar 12 di antaranya, untuk berbagai Pod yang saya gunakan.

Saya mencoba membuat iPhone 5S menggunakan XCode 5.

Saya sudah mencoba berbagai solusi di sini pada SO, tetapi belum ada satupun yang berfungsi.

Bagaimana cara memperbaiki Kesalahan Apple Mach-O Linker ini?


Baru saja menemukan peringatan lain yang mungkin menarik, saya harap ini menuntun saya ke solusinya:

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

GangstaGraham
sumber
Solusi Sederhana Pergi ke Target -> Menghubungkan -> Linker lain Tandai dan tambahkan $ (diwarisi) di flag linker lain di kedua Debug dan Rilis.
Mihir Oza

Jawaban:

248

Jika Arsitektur dan Arsitektur Valid Anda baik -baik saja, Anda dapat memeriksa apakah Anda telah menambahkan $(inherited), yang akan menambahkan flag linker yang dihasilkan di pod, ke Flager Linker Lainnya seperti di bawah ini: masukkan deskripsi gambar di sini

untung-untungan
sumber
7
@ chancyWu Bisakah Anda jelaskan?
Paul Brewczynski
5
juga jika ini masih tidak berhasil, tambahkan @ (diwarisi) ke Jalur Pencarian Perpustakaan juga.
Enrico Susatyo
1
Lol, Use the $(inherited) flagperingatan terminal diabaikan . Dan kesalahan membawaku ke sini. menyelamatkan hari saya.
Sushil Sharma
2
Saya bekerja dengan Xcode 7.2 dan di Other Linker Flags -> Debug Saya melihat: -weak_framework CoreFoundation -weak_framework UIKit -weak_framework AVFoundation -weak_framework CoreMedia -weak-lSystem -ObjC ... di sini saya menambahkan $ (diwarisi) tetapi tidak t work
Alessandra
Anda menghemat banyak waktu saya. Terima kasih.
Nirmalsinh
123

Masalahnya adalah bahwa cocoapods belum dibangun untuk arsitektur arm64 namun karenanya mereka tidak dapat dihubungkan ketika Anda membangunnya. Kemungkinan Anda tidak dapat menggunakan paket-paket itu sampai mereka diperbarui dan menggunakan arsitektur itu. Anda dapat memperbaiki kesalahan linker dengan masuk ke proyek -> target (nama proyek Anda) -> membangun pengaturan dan mengubah arsitektur menjadi arsitektur standar (armv7, armv7s), dan arsitektur yang valid ke armv7, armv7s.

Catatan, ini berarti Anda tidak akan mendapatkan kekuatan penuh dari prosesor 64 bit. Anda bilang Anda sedang membangun untuk 5s, jadi mungkin ada beberapa alasan Anda membutuhkan ini. Jika Anda karena alasan tertentu benar-benar membutuhkan kekuatan itu (mungkin Anda sedang membangun sebuah game), dan sangat membutuhkan file-file itu, Anda bisa mengirimkan permintaan tarik dan kemudian mengkompilasi ulang proyek ke arm64 dengan mengatur bidang-bidang yang sama ke arm64 dalam file yang Anda tarik dari proyek sumber terbuka. Tapi, kecuali Anda benar-benar membutuhkan file-file ini agar kompatibel 64 bit, itu sepertinya sedikit berlebihan untuk saat ini.

EDIT: Beberapa orang juga melaporkan bahwa pengaturan Build For Active Architecture ke YES juga diperlukan untuk menyelesaikan masalah ini.

Pada 2014-04-28 pengaturannya akan terlihat seperti ini:

masukkan deskripsi gambar di sini

AdamG
sumber
4
Ini menyelesaikan kesalahan, untuk berjalan di simulator, namun, itu tidak menyelesaikan kesalahan untuk berjalan di perangkat. Pod ditolak untuk libPods.a karena arsitekturnya '' (untuk beberapa alasan, tidak terdeteksi - meskipun saya dapat melihatnya di Xcode) tidak berisi semua arsitektur yang diperlukan 'armv7 armv7s'
GangstaGraham
7
Oke, saya dapat ini dengan mengatur Build For Active Architectures To Yes. Terima kasih banyak!
GangstaGraham
2
Selain itu: Anda dapat menggunakan fileperintah di Terminal untuk memberi tahu arsitektur apa yang didukung oleh perpustakaan statis.
funroll
8
Baru saja datang ke sini untuk menambah paduan suara: memilih YA untuk BUILD UNTUK ARSITEKTUR AKTIF adalah pilihan terbaik di sini.
Wells
56
Ini bukan lagi solusi. Apple sekarang menuntut dukungan untuk 64 bit untuk semua penyebaran.
52

Saya memecahkan masalah ini dengan menetapkan bahwa:

ARCHS = armv7 armv7s

VALID_ARCHS = armv6 armv7 armv7s arm64

morisunshine
sumber
1
Saya memiliki masalah serupa ketika menggunakan XCode 5.1 untuk pertama kalinya, ini memperbaikinya. Terima kasih!
GangstaGraham
@morisunshine Anda yakin, sudahkah Anda memeriksa arsitektur biner setelah membangun?
onmyway133
@ onmyway133 Saya telah memeriksa, tetapi sekarang saya belum memenuhi masalah ini di XCode baru.
morisunshine
@morisunshine ya, maksud saya Anda kehilangan arm64
onmyway133
Tidak ada lagi kesalahan build, hingga saat ini tidak masalah. Tapi saat mengunggah bangunan yang diarsipkan, saya mendapatkan kesalahan hilang arm64 bit karena dukungan arm64 bit adalah paksaan dari 1 Februari 2015.
zeeawan
45

Saya mengalami implementasi masalah yang sama / serupa AVPictureInPictureControllerdan masalahnya adalah saya tidak menghubungkan kerangka kerja AVKit dalam proyek saya.

Pesan kesalahan adalah:

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)

Solusinya:

  1. Buka Proyek Anda
  2. Pilih Target Anda
  3. Lalu, pergi ke Build Phases
  4. Buka Tautan Biner Dengan Perpustakaan
  5. Akhirnya, hanya menambahkan + yang AVKit kerangka / lain kerangka .

Semoga ini membantu orang lain mengalami masalah serupa yang saya miliki.

valbu17
sumber
6
Ya, layak disebutkan bahwa ini adalah kesalahan yang dilemparkan jika Anda kehilangan kerangka kerja. Satu petunjuk adalah Anda mencoba menghapus arsitektur dan yang berikutnya / yang tersisa gagal juga ...
Kristen Waite
1
kerja bagus. `" _OBJC_CLASS _ $ _ XXXXXClass ", dirujuk dari:` ,, tambahkan xxx Framework.
iHTCboy
Temukan! Siapa pun yang melihat sesuatu dengan 'xml' dicetak, periksa ini - dalam kasus saya kerangka kerja 'libxml' tidak ditautkan.
Evusas
Setelah memodifikasi pengenalan pod, kesalahan ini terjadi, dan semua metode tidak diperbaiki. Tetapi metode Anda memperbaiki masalah. Catatan: Lib tidak dapat dicari.
bintang bintang
33

Saya juga mengalami masalah yang sama, metode di atas tidak akan berfungsi. Saya tidak sengaja menghapus file di direktori berikut ini.

Penempatan folder:

~ / Perpustakaan / Pengembang / Xcode / DerivedData /

masukkan deskripsi gambar di sini

ylgwhyh
sumber
3
Seaneh ini kelihatannya ini benar-benar berhasil. Terima kasih kawan
Felipe
2
Menghapus data turunan secara manual, melakukan trik untuk saya juga. Bersulang!
L_Sonic
7
Terima kasih! Saya ingin menambahkan sebuah petunjuk: folder tersebut berada di bawah / Pengguna / nama Anda / Perpustakaan / Pengembang / XCode / DerivedData
Stefano Buora
Anda juga harus dapat menghapus data turunan menggunakan terminal: rm -rf ~ / Library / Developer / Xcode / DerivedData
simon_smiley
Menghemat waktu saya ... XDDD
Hsiao-Ting
25

Tetapkan Arsitektur ke armv7 armv7s , Bangun Arsitektur Aktif Hanya menjadi TIDAK , untuk setiap target dalam proyek, termasuk setiap target di Pods

BabyPanda
sumber
Berfungsi agak ... Sekarang saya mendapatkan kesalahan "signature bitcode tidak valid".
JeremyF
18

Saya memperbaiki milik saya dengan memeriksa file implementasi yang dipilih di keanggotaan target di sisi kanan. Ini berguna terutama dalam menangani ekstensi, yaitu keyboard khusus.

Keanggotaan Target

jaytrixz
sumber
Xcode 9 tidak menerapkan ini secara otomatis, meskipun dicentang. Terima kasih.
Amro Shafie
Itu masalahnya. Terima kasih
Ignacio Hernández
11

Inilah beberapa alasannya build_active_architecture diatur ke TIDAK. Xcode sekarang mendeteksi perangkat mana yang telah Anda sambungkan dan akan mengatur arsitektur aktif yang sesuai. Jadi jika Anda mencolokkan iPod Touch generasi ke-2 ke komputer Anda, Xcode harus mengatur arsitektur aktif ke armv6. Membangun target Anda dengan konfigurasi Debug di atas sekarang hanya akan membangun binv armv6 untuk menghemat waktu (kecuali jika Anda memiliki proyek besar Anda mungkin tidak melihat perbedaannya tetapi saya kira detik bertambah seiring waktu).

Saat Anda membuat konfigurasi Distribusi untuk penerbitan ke App Store, Anda harus memastikan opsi ini tidak disetel, sehingga Xcode akan membuat biner universal gendut http://useyourloaf.com/blog/2010/04/21/xcode -build-active-architecture-only.html

Moaz Saeed
sumber
Itu sangat luar biasa FUBARed! Output XCode tergantung pada perangkat apa yang telah Anda hubungkan ke mesin build!
Matt
6

Anda hanya perlu menghapus arm64 dari Arsitektur Valid dan mengatur TIDAK untuk Arsitektur Aktif Saja . Sekarang Bersihkan, Bangun dan Jalankan. Anda tidak akan melihat kesalahan ini lagi.

:) KP

Kalpesh Panchasara
sumber
5

Dipecahkan setelah menghapus konten DerivedData -> Build -> Products -> Debug-iphoneos

Tamir Avrahamov
sumber
4

Ini mungkin terkait dengan libz.dylibatau libz.tbd, hanya perlu menambahkannya ke target Anda untuk menautkan binari, dan mencoba mengkompilasi lagi.

TonyTony
sumber
Sedang mencoba menambahkan kerangka Tesseract, dan hanya ini yang membantu saya, terima kasih. !
HelloimDarius
3

Saya memecahkannya dengan mengatur lengkungan yang valid ke armv7 armv7s dan pengaturan membangun arsitektur aktif hanya untuk YA dalam rilis dan kemudian melakukan "pod install" baru dari baris perintah

Fabio Russo
sumber
3

Diberikan iPhone 5s dan belum menerima versi 64 bit dari perpustakaan pihak ketiga, saya harus kembali ke mode 32 bit dengan Xcode terbaru (sebelum 5.1 tidak mengeluh).

Saya memperbaiki ini dengan menghapus arm64 dari daftar Arsitektur Valid dan kemudian menetapkan Build Active Architecture Only ke NO. Menurut saya ini lebih masuk akal daripada sebaliknya seperti yang ditunjukkan di atas. Saya memposting kalau-kalau orang lain tidak bisa mendapatkan salah satu solusi di atas untuk mereka.

pengguna938797
sumber
3

Saya memiliki masalah yang sama setelah memutakhirkan ke Xcode 5.1 dan memperbaikinya dengan menetapkan Arsitektur ke armv7 armv7s

deko
sumber
3

Terjebak pada masalah ini sepanjang hari.

Saya memiliki beberapa Skema, itu mengkompilasi baik untuk Demo, Internal, Rilis - namun skema Debug tidak akan mengkompilasi dan mengeluh tentang libPods.a yang hilang.

Solusinya adalah pergi ke Proyek -> Target -> Bangun Pengaturan dan ubah "Bangun Arsitektur Aktif Saja" menjadi YA. Bersihkan dan bangun! Akhirnya berjam-jam gatal kepala terpecahkan!

GameDev
sumber
Bukan masalah yang sama persis seperti Anda tetapi serupa. Saya mengatasinya dengan metode yang sama yang Anda berikan.
Helzgate
2

Pengaturan -ObjCuntuk Other Linker Flagsdi Settings Build target memecahkan masalah.

Thomas G.
sumber
2

Ini bekerja untuk saya:

ios sdk 9.3

ke dalam pengaturan build Anda dari arsitektur yang valid app.xcodeproj: armv7 armv7s Build Arsitektur aktif: Tidak

Bersihkan dan bangun, bekerja untuk saya.

Shashank Saxena
sumber
1

Berikut ini berfungsi bagi saya untuk mendapatkan kompilasi GPUImage tanpa kesalahan pada Xcode 5.1 untuk simulator 64-bit dan retina iPad Mini, tanpa perlu menghapus arm64 dari daftar Arsitektur Valid (yang mengalahkan tujuan memiliki perangkat 64-bit untuk pengujian Kinerja 64-bit).

Unduh folder .zip dari halaman GitHub: https://github.com/BradLarson/GPUImage

Buka zip, dan navigasikan ke folder 'framework'. Dari sini, tambahkan dan salin folder 'Sumber' ke proyek Xcode Anda. Pastikan 'Salin item ke folder grup tujuan' dicentang, dan bahwa 'Buat grup untuk folder yang ditambahkan' juga dicentang. Ini akan menyalin file header / implementasi generik, iOS dan Mac ke proyek Anda.

Jika Anda tidak memerlukan file Mac karena Anda sedang mengkompilasi untuk iOS Anda dapat menghapus folder Mac baik sebelum Anda menyalin file ke proyek Anda, atau cukup menghapus grup dari dalam Xcode.

Setelah Anda menambahkan folder Sumber ke proyek Anda, gunakan saja yang berikut untuk mulai menggunakan kelas / metode GPUImage:

#import "Source/GPUImage.h" 

Beberapa hal yang perlu diperhatikan:

  • Jika Anda mendapatkan kesalahan yang mengatakan 'Kakao' tidak ditemukan, Anda telah menambahkan folder Mac / header ke proyek iOS Anda - cukup hapus grup Mac / file dari proyek Anda dan peringatan akan hilang
  • Jika Anda mengganti nama folder Sumber (bukan grup di Xcode), gunakan nama itu alih-alih "Sumber / GPUImage.h" dalam instruksi #import. Jadi, jika Anda mengganti nama folder menjadi GPUImageFiles sebelum Anda menambah proyek Anda, gunakan: #import "GPUImageFiles / GPUImage.h
  • Jelas memastikan arm64 dipilih dalam daftar Arsitektur Valid untuk mengambil keuntungan dari prosesor A7 64-bit!
  • Ini bukan bundel GPUImage.framework (seperti jika Anda mengunduh kerangka kerja dari http://www.raywenderlich.com/60968/ios-7-blur-effects-gpuimage ) sehingga mungkin bukan cara yang benar untuk menggunakan GPUImage yang dimaksudkan oleh Brad Larson, tetapi berhasil untuk proyek SpriteKit saya saat ini.
  • Tidak perlu menautkan ke frameworks / libraries dll - cukup impor header dan folder sumber implementasi seperti yang dijelaskan di atas

Semoga bantuan di atas - sepertinya tidak ada instruksi yang jelas di mana pun meskipun ada pertanyaan yang diajukan berkali-kali, tetapi jangan takut, GPUImage pasti berfungsi untuk arsitektur arm64!

inaccessiblerail
sumber
1

Masalah ini terjadi pada saya setelah menginstal pod melalui Podfile dan pod install. Setelah mencoba banyak perbaikan yang berbeda, saya akhirnya hanya mengimpor Pod secara manual (menyeret file yang diperlukan ke proyek saya) dan itu menyelesaikan masalah.

Will Dennis
sumber
yang bekerja untuk saya juga tetapi merupakan satu pod mudah dengan satu file.
iluvatar_GR
1

Saat jawaban morisunshine menunjuk ke arah yang benar, sedikit perubahan dalam jawabannya memecahkan masalah saya untuk iOS8.2. Terima kasih padanya.

Saya memecahkan masalah ini dengan menetapkan bahwa:

ARCHS = armv7

VALID_ARCHS = armv6 armv7 armv7s arm64

BUILD ACTIVE ARCHITECTURE ONLY= NO
Sandeep Aggarwal
sumber
1
  1. Pergi ke target Bangun Pengaturan.
  2. atur BUILD ACTIVE ARCHITECTURE ONLY = NO untuk Debug dan Release
  3. Bangun dan jalankan
Zia
sumber
3
atur BUILD ACTIVE ARCHITECTURE ONLY menjadi NO dalam proyek PODS juga!
Elad
1

Dalam kasus saya, saya harus mencari

C++ Standard Librarydan pastikan yang libc++dipilih.

Etienne Noël
sumber
1

Bagi saya, saya menggunakan opencv 2.4.9 di xcode 7.2 untuk iOS dan kesalahan di atas terjadi, dan saya memecahkan kesalahan dengan menggunakan opencv melalui pod install daripada kerangka opencv offline.

Anda dapat mencoba dengan menambahkan teks pod opencv di bawah ini dan menghapus kerangka opencv offline jika Anda telah menggunakannya.

pod 'OpenCV', '2.4.9'

Chuyang
sumber
1

Tidak ada solusi yang memperbaiki kesalahan ini dalam kasus saya (Xcode 9), dengan TesseractOCRiOS. Setelah berjam-jam mencoba-coba, saya menemukan solusi yang bagus. Saya hanya menghapus 'pod 'TesseractOCRiOS', '~> 4.0.0'di Podfile, jalankan pod install. Dan kemudian, tambahkan pod 'TesseractOCRiOS', '~> 4.0.0'kembali ke Podfiledan jalankan pod installlagi.

Bang! Berhasil!

Benjamin Wen
sumber
1

"Target OPN [Debug] mengesampingkan pengaturan bangunan OTHER_LDFLAGS". Ini adalah masalah utama. Setelah menambahkan $ (diwarisi) di baris baru di flag linker lain menyelesaikan masalah saya. masukkan deskripsi gambar di sini

Mohsen mokhtari
sumber
1

dalam beberapa kasus, jika Anda mendefinisikan satu antarmuka lagi dalam file .h, tetapi tidak mengimplementasikan semua antarmuka ini, kesalahan ini terjadi.

Tautan tidak dapat menemukan implementasi dalam file .m, jadi Anda perlu mengimplementasikannya dalam file .m Anda untuk setiap antarmuka.

Untuk mengatasi kesalahan ini:

File 1.m .m, menyediakan implementasi untuk setiap antarmuka. 2. membangun kembali

Michael Yang
sumber
0

Saya menghadapi masalah yang sama setelah menginstal kerangka kerja AWS untuk mengatasi masalah ini, saya telah memperbarui file konfigurasi POD dari proyek Anda yang dibuat setelah menginstal AWS POD. Periksa file config seperti di bawah ini

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)   

jika file config Anda tidak berfungsi dengan baik maka Setel flag Other Linker Anda ke $ (diwarisi)

Swapnil1156035
sumber
0

Jika pengaturan arsitektur dan tautannya terlihat bagus, periksa file h Anda. Masalah saya adalah kesalahan yang sama, tetapi saya telah merestrukturisasi file h dan saya menghapus pernyataan eksternal. File m lainnya menggunakan variabel itu, menyebabkan kesalahan linker.

Nick
sumber
0

Menambahkan "Security.framework" membantu saya.

Eran Talmor
sumber