Simbol duplikat untuk arsitektur x86_64 di bawah Xcode


219

Saya sekarang memiliki pertanyaan yang sama dengan judul di atas tetapi belum menemukan jawaban yang tepat. Saya mendapat kesalahan:

    /Users/nle/Library/Developer/Xcode/DerivedData/TestMoboSDK-Client-cgodalyxmwqzynaxfbbewrooymnq/Build/Intermediates/TestMoboSDK-Client.build/Debug-iphonesimulator/TestMoboSDK-Client.build/Objects-normal/x86_64/MoboSDK.o
    /Users/nle/Library/Developer/Xcode/DerivedData/TestMoboSDK-Client-cgodalyxmwqzynaxfbbewrooymnq/Build/Products/Debug-iphonesimulator/libMoboSDK.a(MoboSDK.o)
duplicate symbol _OBJC_METACLASS_$_MoboSDK in:
    /Users/nle/Library/Developer/Xcode/DerivedData/TestMoboSDK-Client-cgodalyxmwqzynaxfbbewrooymnq/Build/Intermediates/TestMoboSDK-Client.build/Debug-iphonesimulator/TestMoboSDK-Client.build/Objects-normal/x86_64/MoboSDK.o
    /Users/nle/Library/Developer/Xcode/DerivedData/TestMoboSDK-Client-cgodalyxmwqzynaxfbbewrooymnq/Build/Products/Debug-iphonesimulator/libMoboSDK.a(MoboSDK.o)
ld: 75 duplicate symbols for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

Bantuan apa pun dihargai.

Akhirnya  saya mencari tahu alasan kesalahan ini karena saya menambahkan -ObjCke Other Linker Flags. Setelah menghapus nilai ini maka saya dapat membangun proyek saya dengan sukses, tetapi saya tidak tahu mengapa. Adakah yang bisa menjelaskan ini?


Linker telah menemukan simbol yang didefinisikan lebih dari sekali - 75, tepatnya. Ini kemungkinan karena Anda #includeakan melakukan #importsesuatu (kemungkinan MoboSDK, apa pun itu) lebih dari sekali.
ravron

kesalahan ini terjadi setelah saya tambahkan GoogleConversionTrackingSDK-iOS-3.0ke proyek saya. Sebelum itu, itu berfungsi ok. Saya juga mencoba untuk menghapusnya, tetapi kesalahan tetap terjadi.
lee

ini bukan masalah Anda, karena sebelum saya menambahkan SDK dari google proyek saya membangun ok.
lee

Jawaban kedua dari Adam Waite benar-benar lurus ke depan. Pastikan tidak ada .m file #imported di suatu tempat.
Bogdan

Dalam kasus saya, saya mencoba menggunakan nama array string yang sama di dua kelas yang terpisah. Ketika saya telah mengubah nama array di salah satu kelas kesalahan ini telah dihapus.
Harapan

Jawaban:


109

75 simbol duplikat untuk arsitektur x86_64

Berarti Anda telah memuat fungsi yang sama dua kali. Saat masalah hilang setelah dihapus -ObjCdariOther Linker Flags, ini berarti bahwa opsi ini menghasilkan fungsi yang memuat dua kali:

dari T&J Teknis

Bendera ini menyebabkan tautan untuk memuat setiap file objek di pustaka yang mendefinisikan kelas atau kategori Objective-C. Sementara opsi ini biasanya akan menghasilkan executable yang lebih besar (karena kode objek tambahan dimuat ke dalam aplikasi), itu akan memungkinkan keberhasilan penciptaan perpustakaan statis Objective-C efektif yang berisi kategori pada kelas yang ada.

https://developer.apple.com/library/content/qa/qa1490/_index.html


1
Dengan kata lain, pastikan Anda menghapus file objek apa pun dalam proyek xcode Anda.
Hipotesis dalam Klavikula

5
Ini juga bekerja untuk saya juga, tetapi perpustakaan saya yang lain tergantung pada -ObjCbendera. Jadi saya harus menyimpan bendera ini di pengaturan proyek saya. Jadi bisakah Anda menyarankan solusi lain?
Sunil Targe

3
Saya kira Anda perlu meninjau semua perpustakaan Anda: Jika Anda mendapatkan kesalahan duplikat penghubung, itu berarti Anda memiliki kode sumber yang sama di 2 perpustakaan atau lebih.
David V

Saya harus menghapus beberapa perpustakaan Bereaksi yang dikeluhkannya di bawah Target-> Build Phases-> Tautan Biner Dengan Perpustakaan di Xcode karena bertentangan dengan pemasangan cocoa pods saya dari React
Coty Embry

Dalam kasus saya, saya memiliki file impor .m. Kesalahan yang sangat bodoh. Setelah saya mengimpor file .h. Sudah siap untuk dibangun !! Terima kasih
Ravi

261

Bagi saya, mengubah 'Tidak Blok Umum' dari Ya menjadi Tidak (di bawah Target-> Bangun Pengaturan-> Apple LLVM - Pembuatan Kode) memperbaiki masalah.


3
Ini menyelesaikan masalah saya. Apakah perlu mengubahnya kembali NO? Apa alasan di balik ini?
Hemang

3
Ya ini menyelesaikan masalah, tetapi bukan alasan di baliknya. Jika Anda mendefinisikan sebuah const, pastikan definitonnya ok. Dalam kasus saya, saya hanya lupa "extern". Ini disebutkan dalam jawaban Sauvik Dolui.
coco

10
Xcode 8 meminta perubahan ini sebagai salah satu pembaruan otomatisnya dan merusak build saya: /
pkamb

1
Setelah menghabiskan 2 jam, masalah ini telah diatasi karena jawaban ini. Terima kasih
Manish Pathak

1
Ini bekerja, tetapi saya harus mengubahnya dalam target dan proyek
Nooblhu

251

Bodoh, tetapi pastikan Anda tidak pernah #importmengedit .mfile karena kesalahan di suatu tempat


3
Saya belum melakukan ini, tetapi solusi ini membantu saya menemukan apa yang telah saya lakukan yaitu mendeklarasikan variabel di luar blok @interface dalam file .h secara tidak sengaja.
Scooter

Saat menggunakan tes unit, hanya file .m yang dihasilkan. Saya membuat file header untuk itu meskipun saya kira ini bukan solusi terbaik - saya ingin membuat kelas uji dasar.
Bruno Muniz

Terima kasih banyak karena telah mencerahkan pikiran saya untuk kemungkinan bahwa saya membuat kesalahan bodoh.
Daniel Lima

bagaimana dengan impor file .m lintas proyek?
noveleven

54

Dalam kasus saya, saya baru saja membuat file header untuk mendefinisikan string konstan seperti ini:

NSString *const AppDescriptionString = @"Healthy is the best way to keep fit";

Saya memecahkan skenario ini dengan menggunakan static:

static NSString *const AppDescriptionString = @"Healthy is the best way to keep fit";

2
ini memecahkan masalah bagi saya. Meskipun saya diawali externbukan static: extern NSString * const kNotificationName;. Yang aneh, karena Anda biasanya tidak menambahkan awalan seperti itu, dan itu berfungsi dengan baik ..
user1244109

Ini, untuk beberapa alasan, memecahkan masalah saya. Terima kasih. Saya tidak mengerti mengapa kompiler tidak bisa memberikan respons yang lebih baik daripada simbol duplikat, yang sepertinya tidak terkait sama sekali.
Sirene

@ Sirens, saya juga mengharapkan pesan kesalahan yang lebih baik dari kompiler LLVM. Pokoknya saya cukup beruntung untuk menemukan kesalahan setelah 2 hari. :(
Sauvik Dolui

ini adalah masalah saya juga mengapa masalah sebenarnya disebabkan oleh ini?
Fatlad

Ini bagus jika semua variabel dalam AppStrings.hadalah konstanta, namun itu akan menyebabkan havok jika Anda menginginkan variabel global yang dapat berubah karena setiap file sumber yang menyertakan file header akan memiliki salinan variabelnya sendiri. Ini solusi yang buruk.
trojanfoe

32

Saya menemukan jawaban yang diterima menyentuh masalah tetapi tidak membantu saya menyelesaikannya, mudah-mudahan jawaban ini akan membantu dengan masalah yang sangat membuat frustrasi ini.

duplicate symbol _OBJC_IVAR_$_BLoginViewController._hud in:

17 duplicate symbols for architecture x86_64

"Berarti kamu telah memuat fungsi yang sama dua kali. Ketika masalah ini hilang setelah menghapus -ObjC dari Other Linker Flags, ini berarti bahwa hasil opsi ini yang berfungsi memuat dua kali:"

Dalam istilah awam ini berarti kita memiliki dua file dalam proyek kita dengan nama yang persis sama. Mungkin Anda menggabungkan satu proyek ke proyek lain? Lihat kesalahan di atas "simbol duplikat" kesalahan untuk melihat folder mana yang diduplikasi, dalam kasus saya itu adalah BLoginViewController.

Misalnya, pada gambar di bawah ini Anda dapat melihat saya memiliki dua BImageViewControllers, bagi saya inilah yang menyebabkan masalah.

Segera setelah saya menghapus satu maka masalah menghilang :)

masukkan deskripsi gambar di sini


2
Bantuan besar, terima kasih. Saya telah mengambil cadangan proyek yang menggunakan cocoapods. Dalam lupa saya perlu membuka ruang kerja ketika saya memuat kembali cadangan dalam Xcode dan menemukan itu tidak membangun, saya kemudian menambahkan AFNetworking langsung ke proyek. Saya kemudian mengatur ulang cocoapods saya, yang menyertakan AFNetworking sebagai ketergantungan dan lupa untuk menghapus folder AFNetworking asli yang telah saya tambahkan ke proyek saya.
JanB

32

Saya memiliki masalah yang sama. Dalam Xcode 7.2 di jalur Target Proyek> Pengaturan Bangun> Tanpa Blok Umum, saya ubah ke TIDAK.


4
Ini masalah saya. Itu adalah pengaturan yang dimasukkan Xcode 8. Terima kasih!
Robert J. Clegg

30

Terjadi juga ketika Anda mendeklarasikan variabel const dengan nama yang sama di kelas yang berbeda:

dalam file Message.m

const int kMessageLength = 36;

@implementation Message

@end

dalam file Chat.m

const int kMessageLength = 20;

@implementation Chat

@end

1
Tidak const tetapi itu bekerja untuk saya ketika saya mengubah nama variabel
Oktay

Saya memiliki ini dengan pointer variabel kelas saya sendiri yang didefinisikan dalam implementasi @ dua kelas yang berbeda
ammianus

Pada waktu kompilasi, kompiler memeriksa simbol duplikat (di sini variabel global) hanya dalam file header (.h). Tetapi pada saat menghubungkan, variabel (global) dalam implementasi (.m) file juga diperiksa dan jika ada duplikat, Linker akan melalui kesalahan: simbol duplikat _xyz
VERMA PANKAJ

30

Ini terjadi pada saya ketika saya menerima pop-up "pengaturan yang direkomendasikan" pada proyek yang saya kembangkan dua tahun lalu di Objective-C.

Masalahnya adalah ketika Anda menerima pembaruan "pengaturan yang direkomendasikan", Xcode secara otomatis mengubah atau menambahkan beberapa pengaturan build, termasuk GCC_NO_COMMON_BLOCKS = YES;.

Ini membuat pembangunan gagal dengan duplicate symbolkesalahan dalam proyek saya yang diperbarui. Jadi saya mengubah No Common Blockke NOdalam pengaturan build saya dan kesalahan hilang.


3
Ya, ini membantu saya. Xcode 8, memperbarui proyek yang lebih lama ke pengaturan yang direkomendasikan. Beralih ini kembali dan saya baik untuk pergi lagi. Terima kasih!
Zoltán

2
Kerja bagus. Banyak membantu saya! Pilihan suara untuk Anda sayang! ;-)
Helen Wood

1
Brilliant mate :)
Burf2000

16

Cara tercepat untuk menemukan duplikat adalah:

  1. Pergi ke Target
  2. Pergi ke Build Phases
  3. Pergi ke Kompilasi Sumber
  4. Hapus file duplikat.

Omg, ini kasus saya, terima kasih banyak! Sekarang aku berhutang budi padamu 4 jam dalam hidupku dan minum bir :)
Miroslav

1
sama-sama, tapi nah terima kasih saya tidak minum :) selamat coding.
J. Goce

Tambahkan beberapa jam lagi untuk itu.
CJ_COIMBRA

Bekerja untukku! Terima kasih!
Wangi

15

Langkah-langkah berikut memecahkan masalah bagi saya.

  1. Pergi ke Bangun Fase dalam pengaturan Target.
  2. Pergi ke "Tautan Biner Dengan Perpustakaan".
  3. Periksa apakah ada perpustakaan yang ada dua kali.
  4. Bangun lagi.

13

Hapus -ObjC dari Bendera Penghubung Lain atau Harap periksa apakah Anda mengimpor file .m alih-alih .h secara tidak sengaja.


1
Hai, semuanya, yang masih bertanya-tanya mengapa flag -ObjC tidak berfungsi - perhatikan jawaban ini. Saya benar-benar salah berpikir -ObjC flag tidak berfungsi dalam kasus "super spesial" saya. Setelah mencari melalui proyek untuk pertanda seperti .m"saya perhatikan bahwa saya memang mengimpor file .m bukannya .h dan setelah memperbaikinya itu berhasil! Talk is cheap, show me the code!Bersulang!
bgplaya

9

Situasi saya dengan beberapa proyek lawas yang dibuka di Xcode 7.3 adalah:

duplicate symbol _SomeEnumState in:

diikuti dengan daftar dua file yang tidak terkait.o, maka ini diulang beberapa kali, lalu akhirnya:

ld: 8 duplicate symbols for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

Apa yang menyelesaikannya bagi saya adalah mengubah deklarasi enum dari:

enum SomeEnumState {
    SomeEnumStateActive = 0,
    SomeEnumStateUsed = 1,
    SomeEnumStateHidden = 2
} SomeEnumState;

untuk ini:

typedef NS_ENUM(NSUInteger, SomeEnumState) {
    SomeEnumStateActive = 0,
    SomeEnumStateUsed = 1,
    SomeEnumStateHidden = 2
};

Jika seseorang memiliki penjelasan untuk ini, tolong beri tahu saya.


Hal yang sama memperbaikinya bagi saya, ketika saya beralih enum ke typedef NS_ENUM itu memperbaiki kesalahan simbol duplikat
Mark24x7

9

Mendefinisikan variabel yang sama di bawah implementasi @ di lebih dari satu kelas juga dapat menyebabkan masalah ini.


tapi kenapa? Hal yang sama terjadi pada saya dengan fungsi C biasa dengan nama yang sama
vib

9

Dalam kasus saya, ada dua file dengan nama yang sama di lokasi

Target> Bangun Fase> Kompilasi Sumber dan hapus semua file duplikat.


8
  • Pergi ke Target
  • Pilih Bangun Pengaturan
  • Cari "Tanpa Blok Umum" , pilih untuk TIDAK .

Ini berhasil untuk saya


7

Saya mengalami masalah ini setelah menginstal Cocoapods. Sekarang terjadi setiap kali saya memperbarui beberapa pod. Solusi yang saya temukan:

Pergi ke terminal:

1) pod deintegrate
2) pod install

Juga, periksa item "Selalu Embed Swift Libraries" di Pengaturan Bangun Anda. Itu harus "pudar" menunjukkan itu menggunakan konfigurasi default. Jika diset ke manual YA, tekan hapus di atasnya untuk mengembalikannya ke konfigurasi default. Ini menghentikan perilaku.


Ini berhasil untuk saya. Namun, "Selalu Embed Swift Libraries" sudah diatur ke NO. Saya beralih ke YES dan kemudian tekan delete dan kemudian jalankan fungsi pod yang disebutkan di atas.
BVB09

5

Bagi saya selama Xcode8 merekomendasikan pembaruan pengaturan proyek "No Blok Umum" ke YA yang menyebabkan masalah ini.


Sama di sini untuk Xcode8.2.1, ketika diterapkan pada proyek lama.
onekiloparsec

Ini memperbaikinya pada XCode 11.3.1 juga
XCode

5

Hari ini, saya mendapat kesalahan yang sama. Kata kunci kesalahannya adalah duplicate. Saya memperbaikinya dengan:

1. Remove the duplicate file at Build Phases-->Compile Sources
2. If you can not remove it at Build Phases, you need find the file at your project and remove the reference by DELETE :

hapus referensi

3. Add the file to your project again
4. Add the file's .m to your Build Phases-->Compile Sources again
5. Build your project, the error will disappear

Terima kasih! Dalam kasus saya, saya mengkompilasi dua main.m di mana satu adalah referensi lama. Ini disebabkan oleh seret dan lepas.
tong

4

Pastikan Anda belum mengimpor file .m secara tidak sengaja, Anda mungkin ingin menghapus data turunan Anda di Jendela Proyek dan kemudian membangun dan menjalankannya lagi.


4

Bagi siapa pun yang memiliki masalah ini, saya tidak melihat resolusi saya dalam jawaban ini.

Setelah mengalami konflik penggabungan .pbxproj yang ditangani secara manual (meskipun buruk), ada referensi rangkap untuk file kelas individu di .pbxproj. Menghapus yang dari Project> Build Phases> Compile Sources memperbaiki semuanya untuk saya.

Semoga ini bisa membantu seseorang di telepon.


juga memiliki konflik penggabungan dan harus menyelesaikannya secara manual dalam file pbxproj. Berakhir dengan ld: X duplicate symbols for architecture x86_64. Memperbaikinya dengan menghapus file sumber yang disebutkan dalam pesan kesalahan dan menambahkannya kembali ke proyek.
kas-kad

4

Mirip dengan Juice007, saya telah mendeklarasikan dan menginisialisasi variabel tipe C dalam dua file .m yang berbeda (yang tidak diimpor!)

BOOL myVar = NO;

Namun, metode ini menyatakan dan menginisialisasi variabel, bahkan dalam .m, bahkan dalam @ implementation memberikannya lingkup global. Pilihan Anda adalah:

  1. Deklarasikan sebagai statis, untuk membatasi ruang lingkup ke kelas:

    static BOOL myVar = NO;
  2. Hapus inisialisasi (yang akan membuat dua kelas berbagi global var):

    BOOL myVar;
    -(void) init{
        myVar = NO;
    }
  3. Nyatakan sebagai properti:

    @property BOOL myVar;
  4. Deklarasikan sebagai iVar yang tepat di @interface

    @interface myClass(){
        BOOL myVar;
    }
    @end

4

Dalam kasus saya, saya memiliki dua main()metode yang ditentukan dalam proyek saya dan menghapus satu memecahkan masalah.


Punya masalah yang sama di sini. Pos Anda membantu saya. Terima kasih!
Baran Emre

3

Baru-baru ini mengalami sakit kepala mencari sumber kesalahan. Saya heran, ketika saya tahu bahwa aplikasi saya tidak ingin dikompilasi, hanya karena saya mengikuti cuplikan kode di kelas yang berbeda:

dispatch_time_t getDispatchTimeByDate(NSDate *date)
{
    NSTimeInterval interval;
    double second, subsecond;
    struct timespec time;
    dispatch_time_t milestone;


    interval = [date timeIntervalSince1970];
    subsecond = modf(interval, &second);
    time.tv_sec = second;
    time.tv_nsec = subsecond * NSEC_PER_SEC;
    milestone = dispatch_walltime(&time, 0);

    return milestone;
}

Semoga itu bisa membantu seseorang.


fungsi pembantu kecil, disalin tanpa sengaja, mudah dilupakan - terima kasih!
Steven A. Lowe

3

Saya harap ini pasti akan membantu Anda

Saya mendapat kesalahan yang sama 3 simbol duplikat untuk arsitektur x86_64

dalam kasus saya, saya telah menyalin kode dari file lain dari proyek yang sama misalnya. kode file Am ke Bm dan setelah kompilasi saya mendapat kesalahan seperti yang disebutkan. dan saya telah memecahkan kesalahan dengan mengubah nama Variabel global.

kesalahan ini datang dalam kasus saya karena menyatakan sama untuk variabel global di kedua file.


3

Saya mendapat kesalahan yang sama ketika saya menambahkan repositori pod

pod 'SWRevealViewController'

untuk kode sumber yang sudah ditambahkan (SWRevealViewController) dari gitHub. Jadi, kesalahan akan diperbaiki dengan menghapus kode sumber atau repositori pod.

Kasus # 2:

Kedua kalinya, kesalahan ini muncul ketika saya menyatakan konstan dalam file .h .

NSString * const SomeConstant  = @"SomeValue";
@interface AppDelegate : UIResponder <UIApplicationDelegate> {
...
...

Kasus ke-2 menyelamatkan saya semalam. Terima kasih!
Pankaj Yadav

3

Jawaban di atas tidak berhasil untuk saya. Inilah cara saya mengatasinya:

1) di finder, hapus seluruh folder Pods dan file Podfile.lock 2) tutup proyek xcode 3) jalankan install pod di terminal 4) buka proyek xcode, jalankan perintah clean build

Bekerja untuk saya setelah itu.


2

Masalah yang sama terjadi pada saya, ketika saya mengintegrasikan proyek lob di dalam proyek saya.

masukkan deskripsi gambar di sini

Sebenarnya proyek lob juga memiliki file AFNetworking, Jadi saya menghapus file .m dari proyek lob.

masukkan deskripsi gambar di sini

Sebenarnya file .m bertentangan dengan file POd / AFNetworking / .m proyek saya

masukkan deskripsi gambar di sini


2

Dalam Xcode 6.3.2. Saya telah memeriksa semua kemungkinan seperti di bawah ini

1: Saya belum mengimpor file .m di proyek saya.

2: Dihapus -ObjCdari bendera penghubung lainnya .

3: Menghapus semua Data yang saya dapatkan .

masih saya mendapatkan kesalahan yang sama. Saya telah menghapus kesalahan ini dengan menghapus segala deklarasi variabel dari .pchfile . dalam kasus saya, saya telah mendeklarasikan AppDelegateobjek dalam .pchfile. akhirnya saya menemukan alasan yang menyebabkan kesalahan. jadi saya menghapus deklarasi variabel apa pun dari file .pch dan pesona pekerjaan proyek saya.


2

Kesalahan konyol lain yang akan menyebabkan kesalahan ini adalah pengulangan file. Saya tidak sengaja menyalin beberapa file dua kali. Pertama saya pergi ke Target -> Bangun Fase -> Kompilasi sumber. Di sana saya perhatikan beberapa file pada daftar itu dua kali dan lokasinya.


Saya tidak tahu mengapa seseorang menurunkan Anda, ini memecahkan masalah saya.
Yawar

2

Saya juga memiliki kesalahan ini hari ini. Itu karena saya mendefinisikan nilai const dalam sebuah .mfile. Tapi saya mendefinisikan .mfile lain yang juga termasuk nilai const ini. Itu artinya ia memiliki dua nilai const yang sama. Jadi kesalahan ini muncul. Dan solusi saya adalah menambahkan kata kunci " static" sebelum nilai const.seperti:

static CGFloat const btnConunt = 9;

Dan kemudian saya membangun proyek itu tidak akan melaporkan kesalahan ini.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.