Simbol Duplikat untuk Arsitektur arm64

103

Ketika saya mencoba menjalankan Proyek Xcode saya, gagal dengan kesalahan yang menyatakan bahwa saya memiliki simbol duplikat. Saya mencari online di mana menemukan duplikat ini tetapi tidak berhasil:

masukkan deskripsi gambar di sini

Ada ide bagaimana cara memperbaikinya?

picciano.dll
sumber
1
itu berarti Anda memiliki terlalu banyak BFAppLinkReturnToRefererView
Andrey Chernukha
Selain itu, Anda mungkin ingin sedikit membersihkan proyek Anda daripada menautkan ke kerangka kerja yang ada di desktop Anda. :)
picciano
Dalam kasus saya, saya telah menambahkan NSString * const tColor; dalam file .h dan NSString const * tColor = @ "# 000022"; dalam dua kelas .m yang berbeda.
ios_dev
Anda dapat menemukan apa yang Anda cari di sini stackoverflow.com/a/46678210/988941
MoOx

Jawaban:

65

Dari error tersebut, terlihat bahwa FacebookSDK.framework sudah menyertakan class Bolts.framework. Coba hapus Bolts.framework tambahan dari proyek.

picciano.dll
sumber
22
bagaimana caranya? bisakah Anda membimbing saya langkah demi langkah
Imdad Ali
68

Bagi saya itu membantu untuk mengalihkan pengaturan compiler "No Common Blocks" ke NO: Sepertinya masuk akal, pengaturan dijelaskan di sini: Untuk apa GCC_NO_COMMON_BLOCKS digunakan?

tania_S
sumber
Kamulah orangnya! Baru saja membuat proyek xCode 7.3.1 baru dan pengaturan default adalah YA :(
Yaro
4
Opsi ini diaktifkan untuk saya oleh jendela "Perbarui proyek ke setelan yang direkomendasikan" Xcode.
periksa kembali
Anda adalah yang terbaik
showmyroutes
tip tak ternilai, tapi tidak membantu dalam kasus saya! : O
Fattie
49

Menggunakan Xcode 8, opsi "Perbarui proyek ke setelan yang disarankan" mengaktifkan 'Tidak Ada Pemblokiran Umum' untuk proyek saya.

Mematikannya kembali ke OFF memperbaiki semuanya.

Adam G
sumber
2
Perbarui proyek ke pengaturan yang direkomendasikan, bagaimana cara melakukannya? maksud saya dari menu mana?
Sazzad Hissain Khan
@SazzadHissainKhan Ada dalam pengaturan build Anda.
Perjalanan
21

Bagi saya, saya mengimpor file sebagai .m bukan .h karena kesalahan

Jason Silver
sumber
Itu LOL, tapi benar; D
Vladimir
ini baru saja terjadi pada saya .. Saya menyalahkan penyelesaian kode untuk
semuanya
21

Saya telah mengacaukan pod saya saat mendowngrade sebuah pod dan saya telah berhasil menyelesaikan masalah dengan simbol duplikat untuk arm64 arsitektur dengan menghapus pod dan menginstalnya lagi dengan:

pod deintegrate
pod install
Matea
sumber
Saya menggunakan Google Places SDK, terintegrasi melalui CocoPods - 3.9.0, dan jawaban ini memperbaiki masalah saya.
andrewlundy
12

Solusi lain adalah:

Pilih Project -> Target -> Build phase -> Compile source -> cari file yang disebutkan di baris error terakhir ke-3 (Dalam kasus Anda BFAppLinkReturnToRefererView.o ).

Kemudian Anda akan melihat 1 atau 2 file di hasil pencarian.

Hapus salah satunya dan kompilasi lagi . Ini harus dikompilasi ulang sekarang karena hanya ada satu file yang tersisa dan tidak ada lagi konflik untuk pembuatan.

Jika itu tidak berhasil, file mungkin memiliki kesalahan di dalamnya dan Anda harus menghapus semuanya dan kemudian mengkompilasi ulang. Ini harus bekerja lagi.


sumber
2
Jawaban yang sangat diremehkan, terima kasih atas bantuan Anda, Lukas! :)
patreu22
No Masalah senang itu mengatasi masalah Anda :)
10

Saat meningkatkan ke Xcode 8, saya mendapat pesan untuk meningkatkan ke pengaturan yang disarankan. Saya menerima dan semuanya diperbarui. Saya mulai mendapatkan masalah waktu kompilasi:

Simbol duplikat untuk XXXX Simbol duplikat untuk XXXX Simbol duplikat untuk XXXX

Sebanyak 143 kesalahan. Pergi ke Target-> Build settings -> No Common Blocks -> Set to NO. Ini menyelesaikan masalah. Masalahnya adalah bahwa proyek terintegrasi memiliki blok kode yang sama dan karenanya tidak dapat mengkompilasinya. Penjelasan dapat ditemukan di sini .

iosCurator
sumber
9

Kesalahan ini terjadi saat Linker mencoba menautkan file obj. Beberapa alasan yang dapat saya pikirkan untuk kesalahan ini adalah:

  1. Fungsi / Kelas duplikat didefinisikan di dua tempat / file berbeda dalam proyek dan hanya satu dari mereka yang seharusnya dikompilasi untuk setiap variasi perintah build. Tetapi entah bagaimana kedua file itu dikompilasi dalam proyek Anda. Jadi, Anda perlu memeriksa kondisi if-else atau dependensi lain yang menambahkan file src ke daftar file yang perlu dikompilasi dan menghapus file yang tidak diperlukan untuk perintah build khusus Anda.

  2. Fungsi / Kelas duplikat didefinisikan secara tidak sengaja di dua tempat / file yang berbeda dalam proyek. Hapus definisi yang salah.

  3. Bersihkan direktori OBJ Anda sebelum Anda membangun lagi, mungkin ada beberapa file obj lama di sana dari build Anda sebelumnya yang mungkin menyebabkan konflik ini.

PS saya bukan ahli, tetapi ini adalah cara saya memecahkan masalah ini ketika saya menghadapinya. :)

ManyuBishnoi
sumber
9

Jika Anda pindah ke Xcode 7 atau 8 dan membuka proyek yang sangat lama, saya mengalami masalah ini:

di SomeConstFile.h

NSString * const kAConstant;

di SomeConstFile.m

NSString *const kAConstant = @"a constant";

Versi sebelumnya dari kompilator mengasumsikan bahwa definisi di file header adalah eksternal dan termasuk SomeConstFile.h di semua tempat itu baik-baik saja.

Sekarang Anda perlu secara eksplisit mendeklarasikan consts ini sebagai extern:

di SomeConstFile.h

extern NSString * const kAConstant;
Dan Loughney
sumber
1
Terima kasih untuk ini! Sedang berjuang dengan masalah dengan file constants.h Saya membuat lol
Sung Min Kim
1
Terima kasih atas jawabannya. Saya juga menghadapi masalah yang sama dan jawaban Anda berhasil untuk saya ...
reetu
1
Terima kasih, saya sedang berjuang untuk masalah ini selama 3-4 jam terakhir
Sumit Kumar Saha
9

Di bawah Patch bekerja untuk saya .. :)

Step 1: Go to TARGETS -> Build Settings -> No Common Blocks -> No

Step 2: Go to TARGETS -> Build Settings -> enable testability -> No

Menyetelnya kembali ke TIDAK memecahkan masalah!

Saumil Shah
sumber
2
Langkah 2: Memecahkan masalah saya. Terima kasih :)
Dorald
2

Nah, beberapa kali ketika menggunakan SDK seperti FB atau Perpustakaan seperti Vuforia atau GoogleAnalytics, menambahkan proyek sampel dapat menyebabkan masalah bahwa mereka sudah termasuk Kerangka dan sejenisnya, jadi Anda harus memastikan tidak mengulangi simbol yang Anda tambahkan secara manual saat sudah termasuk dalam sampel

IsPha
sumber
2

Bagi saya, masalahnya adalah gaya pembuatan const, yang berfungsi dengan baik hingga iOS8 ini .. Saya memiliki beberapa baris sebagai:

int const kView_LayoutCount = 3;

di file .h saya. Enam baris seperti menghasilkan 636 file linker setelah blok umum disetel ke NO. (14k + jika YA). Memindahkan baris ke .m setelah menghapus .h dari deklarasi nilai dan kompilasi sudah selesai.

Semoga ini bisa membantu orang lain!

menggambar ..
sumber
2

Dalam kasus saya, alasannya terlalu bodoh:

Saya memiliki file Constant.h di mana makro saya telah ditentukan. Saya berpikir untuk melakukan NSString di sana. dan melakukan ini:

NSString const *kGreenColor = @"#00C34E";

ini menyebabkan masalah Simbol Duplikat untuk Arsitektur arm64 dan perintah Linker gagal dengan kode keluar 1. Menghapus baris const NSString berhasil untuk saya.


sumber
2

periksa file yang Anda sertakan, saya mengalami masalah ini karena saya tidak sengaja # mengimpor "namafile.m" alih-alih "namafile.h", koreksi otomatis (tab) meletakkan "m" bukan "h".

Mike Zriel
sumber
Terima kasih banyak, saya tidak menyadari bahwa saya telah melakukan kesalahan ini, menghabiskan seluruh waktu saya. Terima kasih lagi 👍
Supertecnoboff
1

Dari error tersebut, akan muncul Classes yang muncul berkali-kali, temukan dan hapus Classes yang akan berfungsi.

Saya membuat file AppDelegate.h dan .m membuat banyak waktu. Jadi kesalahan ini akan terjadi Akhirnya temukan dan hapus kelas yang berfungsi dengan baik untuk saya.

Karthickkck
sumber
1

untuk mengatasi masalah ini masuk ke fase Build dan cari tentang file duplikat seperti (facebookSDK, unityads) dan hapus (ekstensi file.o) lalu buat lagi.

Mahmoud abualamrien
sumber
0

Bagi saya, saya membuat metode yang disebut sampleMethoddi ViewController_A dan membuat metode yang sama di ViewController_B juga, Itu menyebabkan saya kesalahan ini, kemudian saya mengubah nama metode di ViewController_B menjadi secondSampleMethod. Itu memperbaiki kesalahan.

Sepertinya fitur yang bagus untuk mengurangi kode dan tidak menduplikasi kode yang sama di banyak tempat.

Saya mencoba mengubah blok Tidak Umum dari Ya ke Tidak kemudian mengaktifkan kemampuan pengujian dari Ya ke Tidak. Itu tidak berhasil. Saya telah memeriksa file duplikat juga dalam fase pembuatan, tetapi tidak ada file duplikat.

R. Mohan
sumber
0

Saya mendapat masalah ini karena saya malas mendefinisikan variabel di .m saya di luar metode, lalu di file .m lain saya mendefinisikan variabel lain dengan nama yang sama di luar metode. Ini menyebabkan masalah duplikat nama variabel global.

Albert Renshaw
sumber
0

Masalahnya bagi saya adalah saya telah memasukkan kerangka kerja secara manual tetapi juga memasukkan kerangka kerja yang sama di CocoaPods tanpa mengetahui saya melakukannya. Setelah saya menghapus satu atau lainnya, masalahnya hilang

MobileMon
sumber
0

Saya dapat mengatasi kesalahan ini yang mengatakan "158 simbol duplikat untuk arsitektur armv7, 158 simbol duplikat untuk arsitektur arm64" --- Jika ini juga yang Anda dapatkan, berarti Anda mencoba mengompilasi file yang sedang mengimpor atau mewarisi framework atau library statis yang memiliki referensi ke kode atau file C ++. Cara mudah untuk menangani ini adalah dengan mengubah ekstensi file .m Anda menjadi .mm. Beginilah cara penanganannya jika Anda menggunakan Objective C, meskipun tidak yakin pada Swift.

Juga di setelan build Anda - Anda bisa mengupdate "flag linker lain" ke -lc ++

Manish Gupta
sumber
0

Jika seseorang bereksperimen dengan mengerjakan Flutter, jangan coba pod deintegrate, pod init.

Cara saya menyelesaikannya adalah menjalankan flutter clean, flutter run -d [Perangkat iOS]

Semoga bisa membantu seseorang.

Dx_
sumber
0

Tlg Ubah pengaturan.

Langkah 1: Pergi ke TARGET -> Build Settings -> No Common Blocks -> No

Langkah 2: Buka TARGET -> Build Settings -> aktifkan testability -> No

Dnyaneshwar Shinde
sumber