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
Jawaban:
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:sumber
Use the $(inherited) flag
peringatan terminal diabaikan . Dan kesalahan membawaku ke sini. menyelamatkan hari saya.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:
sumber
file
perintah di Terminal untuk memberi tahu arsitektur apa yang didukung oleh perpustakaan statis.Saya memecahkan masalah ini dengan menetapkan bahwa:
ARCHS = armv7 armv7s
VALID_ARCHS = armv6 armv7 armv7s arm64
sumber
Saya mengalami implementasi masalah yang sama / serupa
AVPictureInPictureController
dan masalahnya adalah saya tidak menghubungkan kerangka kerja AVKit dalam proyek saya.Pesan kesalahan adalah:
Solusinya:
Semoga ini membantu orang lain mengalami masalah serupa yang saya miliki.
sumber
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 /
sumber
Tetapkan Arsitektur ke armv7 armv7s , Bangun Arsitektur Aktif Hanya menjadi TIDAK , untuk setiap target dalam proyek, termasuk setiap target di Pods
sumber
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.
sumber
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
sumber
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
sumber
Dipecahkan setelah menghapus konten DerivedData -> Build -> Products -> Debug-iphoneos
sumber
Ini mungkin terkait dengan
libz.dylib
ataulibz.tbd
, hanya perlu menambahkannya ke target Anda untuk menautkan binari, dan mencoba mengkompilasi lagi.sumber
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
sumber
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.
sumber
Saya memiliki masalah yang sama setelah memutakhirkan ke Xcode 5.1 dan memperbaikinya dengan menetapkan Arsitektur ke armv7 armv7s
sumber
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!
sumber
Pengaturan
-ObjC
untukOther Linker Flags
di Settings Build target memecahkan masalah.sumber
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.
sumber
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:
Beberapa hal yang perlu diperhatikan:
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!
sumber
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.sumber
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:
sumber
sumber
Dalam kasus saya, saya harus mencari
C++ Standard Library
dan pastikan yanglibc++
dipilih.sumber
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'
sumber
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'
diPodfile
, jalankanpod install
. Dan kemudian, tambahkanpod 'TesseractOCRiOS', '~> 4.0.0'
kembali kePodfile
dan jalankanpod install
lagi.Bang! Berhasil!
sumber
"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.
sumber
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
sumber
Saya menghadapi masalah yang sama. Solusi saya saya temukan di sini: Mengapa tautan tautan menghubungkan perpustakaan statis dengan kesalahan? iOS
Menambahkan $ (TOOLCHAIN_DIR) / usr / lib / swift / $ (PLATFORM_NAME) ke jalur pencarian perpustakaan memperbaiki masalah.
sumber
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
jika file config Anda tidak berfungsi dengan baik maka Setel flag Other Linker Anda ke $ (diwarisi)
sumber
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.
sumber
Menambahkan "Security.framework" membantu saya.
sumber