Perintah Linker gagal dengan kode keluar 1 (gunakan -v untuk melihat permintaan), Xcode 8, Swift 3

114

Saya tidak bisa menghilangkan kesalahan ini!

Saya telah mencoba segala macam hal seperti membersihkan Data Berasal (Preferensi-> Lokasi-> klik panah abu-abu untuk membuka folder Data Berasal di Finder-> klik kanan, pindah ke sampah), membersihkan proyek (CMD + Shift + K atau Produk -> Bersihkan), perbarui carthage dan dependensi, periksa jawaban lain di StackOverflow (sebagian besar penyesuaian dalam Pengaturan / Fase Build), dan reklon aplikasi dari github, dll.

Proyek yang sama bekerja di komputer kolaborator saya ..

EDIT: Dari jawaban teratas saat ini, saya dapat melakukan debug sedikit lebih jauh ... Saya masih belum yakin bagaimana cara memperbaikinya. Sepertinya saya memiliki sesuatu dalam proyek ini dua kali? Saya melihat dan tidak dapat menemukan apa pun yang muncul dua kali!

Berikut gambar log tersebut:

Jake Dobson
sumber
mengapa Anda menerima jawaban peringkat teratas jika itu tidak menyelesaikan masalah Anda ...?
benomatis

Jawaban:

160

saya menghadapi masalah yang sama hari ini di xcode 8 versi 8.3.2

klik kanan pada masalah -> tampilkan di log

masukkan deskripsi gambar di sini

maka Anda dapat memeriksa apa yang menyebabkan masalah itu

masukkan deskripsi gambar di sini

umairqureshi_6
sumber
Terima kasih untuk itu! Inilah yang saya dapatkan di log: imgur.com/vFkNJzZ
Jake Dobson
Saya akhirnya menyelesaikan ini. Anda membantu membawa saya ke arah yang benar! Benar-benar menyebalkan bahwa Xcode tidak mengungkapkan log ketika diklik ... Bisa menghemat waktu saya!
Jake Dobson
Terima kasih atas tip Mengungkap dalam Log. Saya tidak tahu saya bisa menggunakannya
KarenAnne
1
@GhasemTabatabaei Periksa jawaban saya di bawah ini
Jake Dobson
81
Mengapa ini jawaban yang diterima? Itu tidak benar-benar menjawab pertanyaan, hanya berpotensi membantu dalam mencapai solusi.
Tom Oakley
116

Mungkin Anda menginstal file pod dan Anda masih mencoba membangun dari .xcodeprojfile, bukan.xcworkspace

Aashish
sumber
4
Tidak, saya menggunakan Carthage karena alasan itu. Itu jawaban yang sah yang dapat membantu orang lain dengan kesalahan yang sama ini!
Jake Dobson
1
Saya menambahkan m $ AppCenter kode ke proyek yang ada dan itu membutuhkan Pod. Tidak tahu apa yang sedang terjadi dan telah melakukannya .xcodeprojselama lebih dari setahun .. Sesuatu yang sederhana ini!
Dennis Smolek
1
Perbaikan saya agak terkait dengan ini. Saya baru saja meningkatkan beberapa dependensi dan proyek tersebut sekarang menggunakan CocoaPods. Sebelumnya saya selalu mengerjakan project file. Saya membuka file ruang kerja, yang memiliki proyek dan Pod saya di dalamnya, dan semuanya bekerja dengan baik.
Rozgonyi
40

satu-satunya hal yang berhasil bagi saya adalah menjalankan pod deintegratedanpod install

Charles Harring
sumber
Pertanyaannya sudah terjawab. Jika Anda melihat komentar saya di bawah, saya telah mengimpor file yang sudah diimpor ke file itu. Proyek berada dalam kondisi balapan saat mencoba mereferensikan file dua kali.
Jake Dobson
ok ya itu hanya tidak berhasil untuk saya dan ketika saya googling itu adalah apa yang muncul, jadi saya pikir saya mencoba dan membantu orang lain ... saya baru dalam hal ini, haruskah saya menghapus jawaban saya?
Charles Harring
Saya kira tidak karena sudah ada di sana. Saya yakin seseorang mungkin menganggapnya berguna. Aplikasi yang saya gunakan tidak menggunakan cocoapods. Masalahnya, kesalahan ini sangat umum dan memberikan sedikit informasi tentang dirinya sendiri. Begitu banyak solusi yang dapat ditemukan, bergantung pada masing-masing proyek.
Jake Dobson
Ini menyelamatkan hariku! Tuhan memberkati Anda!
pengguna2612604
19

apakah kamu mencoba bersih? cmd + shift + k

Francisco Perez
sumber
8
Oh ya..kali-kali!
Jake Dobson
Hanya itu yang saya dapatkan ... Mengklik teks tidak mengirim saya ke informasi tambahan atau lokasi file di mana hal itu terjadi seperti yang terjadi pada sebagian besar kesalahan. Tidak ada apa pun di konsol, ia tidak pernah menjalankan aplikasi karena kesalahan ini ..
Jake Dobson
FWIW, saya mengalami masalah ini baru-baru ini ketika membangun dengan SDK dan saran @ FranciscoPerez berhasil. Sangat merekomendasikannya sebagai langkah pertama sebelum Anda terlalu jauh ke dalam debugging.
riastrad
9

Oke ... Jadi inilah yang memecahkan masalah saya ...

di File Delegasi Aplikasi:

#import "AppDelegate.h"
#import "DarkSkyAPI.h"
//#import "Credentials.h"

Saya telah mengimpor Credentials.h di file DarkSkyAPI.m dalam proyek saya. Mengomentari impor ekstra membuat kesalahan hilang!

Beberapa hal untuk disebutkan dan mungkin membantu siapa pun di masa depan. Jawaban @ umairqureshi_6 memang membantu saya selama proses berlangsung, tetapi tidak menyelesaikannya. Dia memimpin ke tempat saya bisa menggali info. Saya terus melihat file AppDelegate dan DarkSkyAPI muncul di log kesalahan dan informasi yang ditarik dari file Kredensial menyebabkan kesalahan. Saya tahu itu pasti ada di salah satu dari 3 file ini, jadi saya segera memeriksa impor, karena saya ingat mendengar bahwa .h membawa semua impor dari file .mnya. Ledakan!

Jake Dobson
sumber
6

Saya sekarang pertanyaannya sudah terjawab. Tetapi jika ini membantu seseorang menghemat waktu: Saya mengalami kesalahan yang sama. Saya memeriksa semuanya untuk menemukan kesalahan yang sangat kecil dan bodoh dari sisi saya. Saya mengimpor file kustom ManagedObject data inti dalam pengontrol tampilan proyek saya. Saya tidak sengaja mengimpor file .m alih-alih file .h yang menyebabkan simbol duplikat dalam kesalahan arsitektur (perintah penaut gagal) karena file .m kelas properti saya mengimpor file .h dari kelas data inti dan karenanya menyebabkan impor duplikat.

Jadi periksa saja apakah Anda telah mengimpor file yang benar sebelum Anda mencoba beberapa solusi.!

Priyanka
sumber
Iya! Ini sangat mirip dengan masalah saya. Saya memiliki file yang sama yang diimpor dua kali dalam proyek saya. Sebaliknya, saya mengimpor "fileA.h" ke "fileB.h", tetapi kemudian mengimpor "fileA.h" dan "fileB.h" ke "fileC.h", atau sesuatu di sepanjang baris tersebut ... Jadi aplikasi macet karena tidak tahu harus menggunakan yang mana. Pasti tempat yang bagus untuk mengingatkan orang lain agar memeriksa kembali impor file mereka!
Jake Dobson
6

Banyak solusi yang disebutkan di atas. Tidak ada yang berhasil untuk saya (tapi coba di atas dulu).

Pilih Project -> Pilih Target -> Linked Framework and Libraries -> Tambahkan semua perpustakaan pod. (hapus jika ada di biner tersemat)

Sekarang hapus ini dari Framework Folder di file explorer kiri xcode.

Ini memecahkan masalah saya.

Aaban Tariq Murtaza
sumber
4

Pilih proyek-> Build Phase-> Tautkan Biner dengan perpustakaan dan tambahkan semua perpustakaan pod.

K Prasad
sumber
3

Saya memiliki masalah yang sama saat menggunakan Carthage untuk dependensi.

Cukup masuk ke Select Project -> Build Settings -> Search for Enable Bitcode -> Jika dipilih ke Yes, pilih No.

Itu memecahkan masalah ini untuk saya.

Adri Silva
sumber
2

Saya memiliki masalah yang sama.

Penyebabnya adalah saya mendeklarasikan variabel global yang sama dalam 2 file . Jadi itu menunjukkan kesalahan yang sama mengatakan 2 simbol duplikat .

Solusinya adalah menghapus variabel tersebut.

Ajit A. Kenjale
sumber
1
mengapa Anda menghapus keduanya dan bukan hanya satu?
Jake Dobson
2

Untuk siapa pun yang mengalami masalah ini dengan kerangka kerja Flurry. Inilah yang memperbaiki masalah saya. Bagi saya masalahnya adalah saya telah mengimpor file berikut tetapi tidak pernah menggunakannya. "libFlurryTVOS_9.2.3" "libFlurryWatch_9.2.3"

Jadi yang harus saya lakukan adalah pergi ke pengaturan target proyek dan menghapus 2 file ini dari bagian "Kerangka kerja dan pustaka yang terhubung" dan masalahnya teratasi.

Cedan Misquith
sumber
2

Dalam kasus saya, alasan kesalahan adalah pustaka yang ditautkan dua kali.

Saya menggunakan react-nativejadi itu ditautkan secara otomatis menggunakan react-native linkdan secara manual di xcode.

Stanislav Mayorov
sumber
2

Pastikan Find Implicit Dependencieskotak centang dicentang.

(Produk -> Skema -> Edit Skema -> Build -> Temukan Dependensi Implisit)

llama591
sumber
2

Saya menguji kerangka kerja Sparkle dengan CocoaPods.

Sayangnya, saya taruh pod 'Sparkle', '~> 1.21' PodFile di tempat yang salah. Saya meletakkannya di bawah Pengujian (untuk pengujian unit).

Setelah ditempatkan di tempat yang benar di PodFile, semuanya baik-baik saja.

pdq
sumber
1

Saya hanya harus melakukannya import Foundation !

Saya menggunakan Kitura untuk sisi server Swift dan terus melupakan ini!

Madu
sumber
Ha. Ya, Anda harus setidaknya mengimpor Foundation sebelum melakukan apa pun! Saya biasanya mengimpor UIKit daripada Foundation, karena hampir selalu saya akan perlu menggunakan fitur UIKit dan UIKit telah mewarisi segalanya dari Foundation untuk Anda. Impor dengan Objc bisa sangat rumit, tetapi sepertinya Anda menggunakan Swift?
Jake Dobson
Ya, saya menggunakan Swift, file yang ada tidak menunjukkan masalah kompiler apa pun, tetapi hanya selama menjalankan file, saya mengalami masalah ini!
Madu
1
Ya, saya tidak berpikir itu benar-benar memeriksa itu sampai runtime, saya bisa saja salah. Tapi, sepertinya tidak akan ada masalah sampai Anda mencoba mengakses sesuatu dari Foundation, tidak dapat menemukan impor, lalu tidak dapat melanjutkan proses - crash!
Jake Dobson
1

Inilah masalah dan solusi saya:

Saya menghapus dua file dari kode sumber menggunakan pohon sumber (Pengontrol versi). Setelah menerapkan diff, yang berisi dua kelas yang saya hapus, Xcode tidak menambahkannya secara otomatis. Jadi saya mendapat kesalahan tautan.

Saya menambahkan file secara manual, dengan klik kanan pada nama grup dan pilih "Tambahkan file ke". Sekarang kesalahan saya teratasi.

Jika ada yang menghadapi kesalahan penaut terkait file kelas, coba tambahkan secara manual.

Sujananth
sumber
1
Sepertinya masalah file yang mereka coba tunjukkan ... File di tempat lain tidak mengambil informasi satu sama lain tampaknya biasa ditemukan di halaman ini. Terima kasih untuk balasan Anda. Berharap itu membantu seseorang di jalan!
Jake Dobson
1

Tidak mengalami masalah ini saat saya membuat dan menjalankan perangkat saya sendiri. Hanya mengalami masalah ini dengan simulator. Saya baru saja me-restart komputer saya dan menjalankannya. Berhasil.

therealManUtdFan
sumber
1

Dalam kasus saya, saya telah mengubah Targetnama di saya PodfileJadi itu membuat Kesalahan yang sama untuk saya.

Larutan

Pergi saja project-> Build Phase->Link Binary with librariesHapus yang lama FrameWorksdengan mengklik minus button(-)Dan bersihkan dan Jalankan lagi. Itu berhasil saya.

masukkan deskripsi gambar di sini

Hapus Tidak Diinginkan .framework.

Krunal Nagvadia
sumber
1

Jawaban lain tidak berhasil untuk saya, jadi di sini saya membagikan solusi saya jika itu dapat membantu orang lain:

Masalah saya adalah bahwa saya mengonfigurasi Podfile dari XCode-Project saya untuk platform yang salah. Mengubah "platform: ios" di awal Podfile saya menjadi "platform: macos" berhasil bagi saya untuk menghilangkan kesalahan.

Vorashy
sumber
0

Saya memiliki masalah yang sama. Jika Anda memeriksa proyek github apa pun, alih-alih menggunakan git clone, gunakan git lfs clone, karena terkadang, beberapa file besar tidak dikloning dengan benar hanya dengan menggunakan git. Selain itu, pastikan bitcode Anda dinonaktifkan.

Aman pradhan
sumber
catatan bagus..tetapi biasanya konsol akan memberi tahu Anda bahwa beberapa file terlalu besar untuk ditransfer?
Jake Dobson
0

Bagi saya, file kunci permata menentukan versi cocoapods yang lebih lama daripada yang telah saya instal. Aku harus re-cabang dan menjalankan bundle exec pod installbukannyapod install

Jason
sumber
0

Sepertinya masalahnya berbeda untuk kebanyakan dari kita, dan pesan kesalahan memiliki info yang layak. Dalam kasus saya, Deployment Target ditetapkan 10.13oleh export MACOSX_DEPLOYMENT_TARGET=10.13garis, tetapi saya tetap berjalan 10.14. Jadi saya harus mengalihkan Target Deployment saya ke 10.14di General> Deployment Info, agar simbol terkait ITLibrary tersedia lagi.

cd /Users/foo/src/scrobble/macos/itunes-scrobble
    export MACOSX_DEPLOYMENT_TARGET=10.13

... SNIP ...

Undefined symbols for architecture x86_64:
  "_OBJC_CLASS_$_ITLibMediaItem", referenced from:
      objc-class-ref in AppDelegate.o
  "_OBJC_CLASS_$_ITLibPlaylist", referenced from:
      objc-class-ref in AppDelegate.o
  "_OBJC_CLASS_$_ITLibrary", referenced from:
      objc-class-ref in AppDelegate.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
nishanths
sumber
0

Dalam kasus saya, saya menghasilkan banyak produk dari proyek yang sama. Untuk salah satu produk, filemain.m file tersebut mengimpor file header dari folder lain di bawah proyek yang sama. Tetapi file itu tidak disertakan dalam "Sumber yang Disetujui" di bawah "Tahap Pembuatan". Ini menyebabkan kesalahan penaut.

Setelah dengan hati-hati membandingkan pengaturan "Build Phases" untuk produk yang dapat dibangun dengan sukses, saya menyadari bahwa .mfile header perlu dimasukkan dalam daftar "Compiled Source". Masalah saya teratasi setelah menambahkan file itu. Melampirkan gambar untuk kejelasan. File yang disorot harus ditambahkan.

masukkan deskripsi gambar di sini

Raiyan
sumber
-1

Saya mendapat masalah yang sama saat membuat build proyek Ionic 1.

Saya dapat menyelesaikan masalah setelah menghapus file CDVLogger.h & CDVLogger.m

KAUSHIK PARMAR
sumber
Sepertinya Anda tidak pernah membutuhkan file-file itu? Pasti telah memanggil file di file itu dan file lainnya juga, membingungkan proyek dan mencegahnya berjalan.
Jake Dobson
-4

Oke, saya mengalami masalah yang sama hari ini dan mulai mencari di Google, ketika saya menemukan utas ini. Saya belum selesai membaca pertanyaan ketika jawabannya muncul di benak saya: Saya mendeklarasikan kelas dengan konstruktor kosong

class MyClass{
    MyClass();

    void func_one(){
    // code
    }

    void func_two(){
    // code
    }

    ~MyClass(){
        cout << "Deleting object" << endl;
     }
};

Kemudian saya berpikir mengapa tidak menghentikan (tidak yakin apakah saya benar dengan pemilihan kata di sini, tapi siapa yang peduli) konstruktor kelas saya dengan tanda kurung kurawal ( {}). Jadi saya melakukan:

class MyClass{
    MyClass(){}

    void func_one(){
    // code
    }

    void func_two(){
    // code
    }

    ~MyClass(){
        cout << "Deleting object" << endl;
     }
};

Masalahnya teratasi, kode saya mulai bekerja dengan sempurna.

Saya tahu, praktik yang baik adalah menyelidiki masalah dan menemukan penyebab sebenarnya, tetapi ini berhasil untuk saya.

Michael Gnedkovskii
sumber
Menurut saya ini tidak berguna untuk utas ini ... Sepertinya kesalahan tersebut mencoba untuk mendapatkan masalah file, seperti mengimpor hal yang sama dalam file terpisah. Saya merasa aneh Anda akan mendapatkan kesalahan ini, karena ini adalah kesalahan khusus Objective-C ...
Jake Dobson
Saya mendapat kesalahan ini di C ++ juga. Kesalahan penaut dalam kasus Anda mungkin karena penaut tidak dapat menemukan kode untuk konstruktor Anda. Saya mengalami kesalahan serupa dengan fungsi yang saya ganti namanya, tetapi karena Xcode 10 tidak dapat membuka log penaut sendiri, dan saya tidak tahu Anda dapat mengeklik kanan dan "mengungkapkan di log", saya bingung untuk beberapa menit mencoba menemukan kesalahan.
Matt Parkins