File bersifat universal (tiga irisan), tetapi tidak mengandung kesalahan irisan (n) ARMv7 untuk pustaka statis di iOS, lagi pula untuk memotong?

403

Saya memutakhirkan versi Xcode dan ketika menggunakan perpustakaan statis eksternal, saya mendapatkan pesan ini:

ld: file bersifat universal (3 slice) tetapi tidak mengandung slice (n) armv7s: / file / lokasi untuk arsitektur armv7s dentang: error: perintah linker gagal dengan kode keluar 1 (gunakan -v untuk melihat doa)

Apakah ada cara untuk mem-bypass ini dan menambahkan dukungan ke perpustakaan jika pengembang perpustakaan belum memperbarui perpustakaan mereka?

Dafna Elazazer
sumber
Ini tampaknya menjadi solusi yang baik untuk saat ini - galloway.me.uk/2012/09/hacking-up-an-armv7s-library
Rajavanya Subramaniyan

Jawaban:

418

Jika Anda ingin menghapus dukungan untuk arsitektur apa pun, misalnya, ARMv7-s dalam kasus Anda, gunakan menu Project -> Build Settings -> hapus arsitektur dari "arsitektur yang valid".

Anda dapat menggunakan ini sebagai solusi sementara sampai perpustakaan telah diperbarui. Anda harus menghapus arsitektur dari proyek utama Anda, bukan dari perpustakaan.

Atau, Anda dapat mengatur tanda untuk konfigurasi debug Anda "Build Active Architecture Only" ke Ya. Biarkan konfigurasi rilis "Build Active Architecture Only" ke Tidak, hanya saja Anda akan mendapatkan pengingat sebelum merilis bahwa Anda harus memutakhirkan pustaka pihak ketiga yang Anda gunakan.

Nicholas
sumber
11
Anda tidak perlu mengkompilasi ulang perpustakaan. Anda dapat menghapus bendera ini dari proyek yang menggunakan perpustakaan.
Nicholas
4
Ini akan berfungsi, karena aplikasi lama yang belum dikompilasi dengan dukungan armv7 harus dijalankan juga. Tetapi Anda akan kehilangan beberapa optimasi spesifik. Ini harus menjadi solusi sementara.
Nicholas
2
Kerangka kerja Dropbox telah diperbarui untuk masalah ini, lihat forums.dropbox.com/topic.php?id=90014
railwayparade
6
Menghapus armv7s dari daftar Arsitektur Valid bekerja untuk saya, namun demikian menghapusnya dari Arsitektur. Namun dalam kedua kasus, saya akan dapatkan No architectures to compile for (ARCHS=i386, VALID_ARCHS=armv7).dari tautan yang hanya bisa saya pecahkan dengan menambahkan i386ke daftar Arsitektur yang Valid.
levigroker
6
Tidak, armv7s adalah set instruksi prosesor A6 yang sedang digunakan di iPhone 5. Karena A6 kompatibel mundur, itu masih akan menjalankan set instruksi armv7.
Nicholas
191

Saya hanya beralih "Hanya Membangun Arsitektur Aktif" menjadi "Ya" di pengaturan membangun target, dan tidak apa-apa sekarang!

Blasco73
sumber
1
@ Blasco73 Apakah Anda tahu bahwa Anda hebat? Kamu harus Ini dia, Tuan, luar biasa!
thandasoru
15
Bagaimana ini bisa menjadi solusi yang baik. Ini menghapus kesalahan, tetapi Anda hanya bisa membangun untuk lengkungan saat ini, tidak semua di pasar ...
esbenr
27

Cobalah untuk menghapus armv7s dari "arsitektur Valid" proyek untuk melepaskan dari masalah ini untuk ponsel iOS 5.1

Arthur Jen
sumber
13

Saya baru saja memposting perbaikan di sini yang juga berlaku dalam kasus ini - pada dasarnya, Anda melakukan hex menemukan-dan-mengganti di perpustakaan eksternal Anda untuk membuatnya berpikir bahwa itu adalah kode ARMv7s. Anda harus dapat menggunakannya lipountuk memecahnya menjadi 3 perpustakaan statis, menduplikasi / memodifikasi satu ARMv7, kemudian gunakan lipolagi untuk merakit perpustakaan baru untuk semua 4 arsitektur.

Ertebolle
sumber
5

Dukungan Buram untuk iPhone 5 (ARMv7s) Seperti yang saya sebutkan di posting kemarin, Flurry mulai mengerjakan versi iOS SDK untuk mendukung prosesor ARMv7 di iPhone 5 baru segera setelah pengumuman pada hari Rabu.

Saya senang memberi tahu Anda bahwa pekerjaan telah selesai dan SDK sekarang tersedia di situs.

RAZ
sumber
4

gunakan menu Project -> Build Settings ->

kemudian hapus armv7s dari "arsitektur yang valid". Jika standar telah dipilih maka hapus itu dan kemudian tambahkan armv7.

Panky
sumber
1

Dalam hal ini terjadi pada seseorang. Saya membangun perpustakaan saya sendiri untuk digunakan dengan kode pihak ketiga. Ketika saya sedang membangunnya untuk dikirim, saya secara tidak sengaja meninggalkan iPhone 4S saya terhubung, dan Xcode membangun perpustakaan saya hanya untuk arsitektur yang terpasang daripada mengikuti pengaturan proyek. Hapus semua perangkat yang terhubung dan bangun kembali perpustakaan, tautkan, dan Anda akan baik-baik saja.

Semoga ini bisa membantu.

Raphael Ayres
sumber
0

Dalam kasus saya, saya menautkan ke perpustakaan pihak ketiga yang agak lama (dikembangkan untuk iOS 6, di XCode 5 / iOS 7). Oleh karena itu, saya harus memperbarui perpustakaan pihak ketiga, melakukan Clean and Build, dan sekarang berhasil dibangun.

Jay Imerman
sumber