Pertanyaan pemula Xcode:
Ini adalah pengalaman pertama saya dengan Xcode 4.6.3.
Saya mencoba untuk menulis program konsol yang sangat sederhana, yang mencari perangkat BT berpasangan dan mencetaknya ke NSLog.
Itu dibangun dengan kesalahan berikut:
Undefined symbols for architecture x86_64:
"_OBJC_CLASS_$_IOBluetoothDevice", referenced from:
objc-class-ref in main.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
Saya mencari seperti orang gila. Masalah umum harus menjadi referensi ke file, yang hanya file header yang diimpor dan tidak ada implementasi (* .m-file) ditemukan oleh linker. Namun perpustakaan IOBluetooth, Kerangka kerja standar seperti Kerangka Kerja Yayasan.
Apa yang saya lewatkan dalam pernyataan saya di atas?
Saya juga telah mencoba membangunnya untuk mesin 32-bit (build gagal lagi). Ini jelas merupakan kesalahan linker, namun saya tidak tahu, apa hubungannya, kecuali bahwa ada masalah dengan menemukan implementasi untuk IOBluetoothDevice, pada arsitektur x86 dan x64, sedangkan file header berasal dari standar termasuk Kerangka, yang disebut IOBluetooth?
Untuk informasi Anda, kode utama saya "main.m" adalah:
#import <Foundation/Foundation.h>
#import <IOBluetooth/objc/IOBluetoothDevice.h> // Note the import for bluetooth
#import <IOBluetooth/objc/IOBluetoothDeviceInquiry.h> // Note the import for bluetooth
int main(int argc, const char * argv[])
{
@autoreleasepool {
IOBluetoothDevice *currentDevice;
NSArray *devices = [ IOBluetoothDevice pairedDevices];
for (id currentDevice in devices){
NSLog(@"%i : %@",[ currentDevice classOfDevice ], [ currentDevice name ]);
}
}
return 0;
}
Terima kasih atas bantuan atau petunjuk ke arah yang benar.
sumber
$(inherited)
ke Bendera Penghubung Lainnya , bersihkan dan bangun.Jawaban:
Sepertinya Anda tidak ada, termasuk IOBluetooth.framework dalam proyek Anda. Anda dapat menambahkannya dengan:
-Klik pada proyek Anda di kiri atas panel kiri (ikon biru).
-Dalam panel tengah, klik pada tab Build Phases.
-Di Bawah "Tautan Biner Dengan Perpustakaan", klik tombol plus.
-Cari IOBluetooth.framework dari daftar dan tekan Add.
Ini akan memastikan bahwa definisi IOBluetooth.framework ditemukan oleh tautan. Anda dapat melihat bahwa kerangka kerja adalah anggota target Anda dengan mengklik kerangka kerja di panel kiri dan melihat keanggotaan target kerangka kerja di panel kanan (perhatikan saya telah memindahkan kerangka kerja di bawah grup Kerangka untuk tujuan organisasi):
sumber
UPD
Apple mengharuskan untuk menggunakan arsitektur arm64 . Jangan gunakan pustaka x32 di proyek Anda
Jadi jawaban di bawah ini tidak benar lagi!
Jawaban lama
Xcode 5.1 baru menetapkan arsitektur armv7, armv7s, dan arm64 sebagai default.
Dan kadang-kadang kesalahan "kegagalan pembangunan" Simbol tidak terdefinisi untuk arsitektur x86_64 "" mungkin disebabkan oleh ini. Karena, beberapa lib (bukan Apple) awalnya dikompilasi untuk x32 dan tidak mendukung x64.
Jadi yang Anda butuhkan, adalah mengubah "Arsitektur" untuk target proyek Anda seperti ini
NB. Jika Anda menggunakan Cocoapods - Anda harus melakukan hal yang sama untuk target "Pods".
sumber
Valid Architectures
danArchitectures
.Ini umumnya berarti, Anda memanggil "xxx" (mungkin kerangka kerja atau kelas) dari kelas "yyy". Kompilator tidak dapat menemukan "xxx" sehingga kesalahan ini terjadi.
Anda perlu menambahkan file yang hilang (dalam hal ini "xxx") dengan mengklik kanan pada folder proyek Anda di jendela navigator dan mengetuk opsi " Tambahkan file ke" YourProjectName " ".
Jendela sembulan akan membuka file proyek Anda di Finder. Di sana, Anda dapat melihat file yang hilang dan hanya menambahkannya ke proyek Anda. Jangan lupa untuk mencentang kotak " Salin item jika perlu ". Semoga berhasil!!
sumber
Saya juga telah melihat kesalahan ini pada Xcode 7.2 ketika data yang diturunkan menjadi rusak (dalam kasus saya, saya menginterupsi build dan mencurigai itu adalah akar penyebabnya).
Jadi jika solusi lain (terutama Chris dan BraveS yang saya duga lebih mungkin) tidak cocok dengan masalah Anda, coba hapus data turunan (Pilih: Jendela / Proyek / Data Turunan -> Hapus) dan bangun kembali.
(Ditambahkan untuk referensi oleh orang lain - Saya tahu pertanyaan asli telah dijawab dengan benar).
sumber
Di bawah Xcode 9.0b5 Anda mungkin menemukan ini karena Xcode 9.0b5 memiliki bug di dalamnya ketika Anda menambahkan kode sumber, itu tidak memenuhi pengaturan target. Anda harus masuk dan menetapkan target masing-masing file secara manual kata penutup:
sumber
Dalam Kasus saya, itu bukan perpustakaan, itu beberapa kelas ..
Solusi Saya punya beberapa target di Xcode dengan beberapa skema (Produksi, Dev dll) .. beberapa implementasi saya yang baru ditambahkan (Class.m) tidak ada di
Jadi saya harus menambahkannya secara manual.
maka saya bisa mengkompilasi & membangun dengan sukses.
sumber
Saya juga mengalami masalah yang sama, metode di atas tidak akan berfungsi. Saya tidak sengaja menghapus file di direktori berikut ini.
Atau
~ / Perpustakaan / Pengembang / Xcode / DerivedData /
sumber
~/Library/Developer/Xcode/DerivedData/
melalui CLI Anda dapat membersihkan direktori sebagai berikut:rm -rf ~/Library/Developer/Xcode/DerivedData/
Saat memperbarui ke Xcode 7.1, Anda mungkin melihat jenis kesalahan ini, dan itu tidak bisa diselesaikan dengan jawaban di atas. Salah satu gejala dalam kasus saya adalah aplikasi berjalan di perangkat bukan di simulator. Anda mungkin akan melihat sejumlah besar kesalahan terkait dengan hampir semua kerangka kerja yang Anda gunakan.
Cara mengatasinya sebenarnya cukup sederhana. Anda hanya perlu menghapus entri dari pengaturan "Jalur Pencarian Kerangka", ditemukan di TARGET Anda> Bangun Pengaturan> bagian Jalur Pencarian (pastikan tab "Semua" dipilih)
Jika Anda melihat entri lain di sini (selain $ (diwariskan)) untuk target utama Anda atau target pengujian Anda, hapus saja jalur yang salah dari semua target dan buat kembali.
sumber
Saya telah menemukan ini juga dapat terjadi jika Anda menyeret folder dengan file Objective-C ke proyek Anda. Jika folder itu muncul biru saya pikir itu menunjukkan tidak terhubung dengan benar. Anda dapat memverifikasi ini (jika Anda menggunakan kontrol versi) karena setiap kali Anda menambahkan file baru file pbxproj harus diperbarui dengan tautan ke file-file baru itu. Namun Anda mungkin menemukan bahwa setelah Anda menambahkan folder bahwa file pbxproj tidak berubah (dan karenanya ada kesalahan penautan). Jadi Anda akan mendapatkan pelengkapan otomatis yang berfungsi dan akan menemukan kelas yang Anda impor, tetapi ketika benar-benar membangun gambar itu gagal dengan kode kesalahan ini.
Solusinya adalah tidak menambahkan folder melainkan menambahkan file. Lakukan ini dan Anda akan melihat pembaruan file pbxproj dan itu harus memperbaiki kesalahan ini.
Ini juga mengasumsikan Anda telah melakukan apa yang disarankan di atas dan telah menautkan dengan benar semua kerangka kerja yang benar.
sumber
Saya mencoba hampir semua yang ada di sini, tetapi masalah saya ternyata adalah sisa-sisa cocoapod sebelumnya. Apa yang berhasil untuk saya adalah:
rm -Rf Pods; pod install
sumber
Saya memiliki kesalahan yang sama, karena alih-alih menghapus file saya hanya menghapus referensi untuk itu. Menemukan file di Finder dan menghapusnya membantu.
sumber
Saya tahu ini adalah pertanyaan lama tetapi hari ini mendapatkan kesalahan yang sama dan tidak ada solusi di atas yang berhasil.
Namun sudah diperbaiki dengan menetapkan opsi:
ke Ya
dan proyek menyusun dan membangun dengan benar
sumber
Saya telah menghadapi masalah ini berkali-kali. Ini biasanya muncul ketika Anda menghapus folder build Anda.
Solusi mudahnya adalah de-integrasi dan menginstal file pod lagi.
sumber
Jika Anda mendapatkan kesalahan ini saat mencoba menautkan ke file C, periksa dulu nama fungsi untuk kesalahan ketik. Berikutnya, periksa kembali bahwa Anda tidak mencoba memanggil fungsi C dari lingkungan C ++ / Objective-C ++ tanpa menggunakan
extern C {}
konstruk. Saya merobek rambut saya karena saya memiliki kelas yang ada dalam file .mm yang mencoba memanggil fungsi C. Ini tidak berfungsi karena di C ++, simbol-simbolnya hancur. Anda benar-benar dapat melihat simbol konkret yang dihasilkan menggunakan alat nm. Terminal ke jalur file .o, dan jalankannm -g
di file yang memanggil simbol dan yang harus memiliki simbol, dan Anda akan melihat apakah mereka cocok atau tidak, yang dapat memberikan petunjuk untuk kesalahan.Anda dapat memeriksa simbol C ++ yang diuraikan dengan cara ini:
sumber
Dalam kasus saya, saya membangun kerangka kerja kustom dengan target Penerapan yang ditetapkan ke 9.1, tetapi target Penerapan aplikasi saya lebih rendah, yang mendukung 8.1. Perkecil kerangka kerja kustom Target penyebaran memecahkan masalah saya.
sumber
Saya terlambat ke pesta tetapi berpikir untuk berbagi satu skenario lagi di mana ini bisa terjadi. Saya sedang mengerjakan suatu kerangka kerja dan mendistribusikannya di atas cocoapods. Kerangka kerja ini memiliki kelas dan protokol objektif c dan swift dan itu berhasil dibangun. Saat menggunakan pod dalam kerangka kerja lain atau proyek itu memberikan kesalahan ini karena saya lupa menyertakan file .m di podspec. Harap sertakan file .swtift, .h, dan .m di sumber podspec Anda seperti di bawah ini: s.source_files = "Projectname / Projectname / ** / *. {Swift, h, m}"
Saya harap ini menghemat waktu orang lain.
sumber
Saya menyelesaikannya dengan menambahkan "-lc ++" di Other Linker Flags di Build Settings.
sumber
Bagi saya, ini mulai terjadi setelah menggabungkan konflik.
Saya mencoba membersihkan dan menghapus build folder, tetapi tidak ada yang membantu. Masalah ini terus terjadi. Kemudian saya menautkan kembali referensi dengan menghapus grup yang bermasalah dan ditambahkan kembali ke proyek dan itu berhasil.
sumber
Bisa juga berupa
#include <windows.h>
file .c yang Anda coba kompilasi.sumber
dalam kasus saya, saya harus menambahkan
ke podfile saya dan kemudian hapus direktori / Pods dan jalankan `pod install`(Xcode 10.1)
sumber
Ini mungkin membantu seseorang. Butuh waktu berhari-hari untuk akhirnya mengetahuinya. Saya bekerja di OBJ-C dan saya pergi ke:
Project
->Build Phases
->Compile sources
dan menambahkanVC.m
file baru yang baru saja saya tambahkan.Saya bekerja dengan kode lawas dan saya biasanya cepat, baru untuk OBJ-C jadi saya bahkan tidak berpikir untuk mengimpor
.m
file saya ke perpustakaan sumber.EDIT:
Berlari ke masalah ini untuk kedua kalinya dan itu adalah sesuatu yang lain. Jawaban ini menyelamatkan saya setelah 5 jam debugging. Sudah mencoba semua opsi di utas ini dan lainnya. https://stackoverflow.com/a/13625967/7842175 Tolong beri dia kredit jika ini membantu Anda, tetapi pada dasarnya Anda mungkin perlu mengatur file Anda ke target di inspektur file.
Secara keseluruhan, ini adalah kode Kesalahan yang sangat tidak jelas yang dapat disebabkan oleh banyak alasan, jadi teruslah mencoba berbagai opsi.
sumber
Kadang, saya lupa menyalin pustaka dari Release-universal dan secara keliru menyalin dari Release-iphoneos. Biasanya Release-iphoneos berisi file .a yang telah dipangkas untuk X86. dan itu memberikan kesalahan.
sumber
dalam kasus saya, hapus pilihan keanggotaan target dan kemudian pilih lagi memperbaiki masalah.
Periksa jawaban William Cerniuk dengan foto lampiran.
sumber
Dalam kasus saya masalah dikompilasi kerangka arsitektur.
Saya menjalankan Xcode 11 dan menggunakan Swift 5.1
Saya mencoba menjalankan tes tetapi produk MyAppFrameWork dikompilasi untuk Perangkat iOS Generik dan target Uji memerlukan lengan x86-64, Jadi saya membangun kembali Kerangka untuk Simulator iOS dan uji kasus yang berhasil mulai berjalan.
sumber