Simbol yang tidak terdefinisi untuk arsitektur i386: _OBJC_CLASS _ $ _ SKPSMTPMessage ", dirujuk dari: error

236

Saya telah mengimpor kerangka kerja untuk mengirim email dari aplikasi di latar belakang yaitu SKPSMTPMessageKerangka. Adakah yang bisa menyarankan mengapa kesalahan di bawah ini ditampilkan

Undefined symbols for architecture i386:

"_OBJC_CLASS_$_SKPSMTPMessage", referenced from:
  objc-class-ref in ConfirmController.o

"_kSKPSMTPPartContentTransferEncodingKey", referenced from:
  -[ConfirmController sendEmail] in ConfirmController.o

"_kSKPSMTPPartMessageKey", referenced from:
  -[ConfirmController sendEmail] in ConfirmController.o

"_kSKPSMTPPartContentTypeKey", referenced from:
  -[ConfirmController sendEmail] in ConfirmController.o

ld: symbol(s) not found for architecture i386
collect2: ld returned 1 exit status

Sumber dari mana kerangka kerja diambil: -

Mengunci Fields di MFMailComposeViewController

Perbarui :

Jawab: Cukup seret dan letakkan folder di atas proyek dan klik salin. Itu pilih kotak centang proyek dan kotak centang target juga.

Mann
sumber
Setelah menambahkan SystemConfiguration.framework dari fase build proyek saya mengkompilasi dengan baik
swiftBoy
Saya Memecahkan masalah ini. Saya telah menambahkan kerangka kerja yang diperlukan untuk Tautan Biner dengan Perpustakaan.
Mihir Oza

Jawaban:

569

Anda bisa mendapatkan jenis kesalahan ini jika file .m kelas Anda tidak terdaftar di bawah langkah "Kompilasi Sumber" pada tab "Bangun Fase" dari target Anda. Biasanya Xcode melakukan ini untuk Anda, tetapi kadang-kadang kehilangan alur dan Anda perlu menambahkan file .m secara manual.

Untuk melakukan ini:

TargetSettings -> Build Phases -> Compile Sources -> tambahkan kelas .m Anda -> Build and Run

Allen Pike
sumber
49
Terkadang kesalahan tersebut muncul karena beberapa kerangka kerja tidak ditautkan dengan benar. Cukup periksa semua kerangka kerja di "Tautan Biner Dengan Perpustakaan" di tab fase pembangunan proyek.
Heitara
Ini juga dapat terjadi dengan file .c, dan mungkin juga .mm.
brodney
Rajneesh, apakah Anda memperbaiki masalah ini? Jika ya, bagaimana Anda memperbaikinya?
codematrix
9
Perlu dicatat bahwa Anda dapat memilih file .m dan centang kotak di sebelah target Anda di panel "Target Keanggotaan" panel kanan. Ketika Anda menambahkan file ke proyek Anda, Anda ditanya apakah Anda ingin "Tambah ke target:", Anda mungkin mengatakan tidak, tetapi Anda dapat menambahkannya kapan saja dengan melakukan apa yang saya katakan.
Nicolas S
4
Saya dulu memiliki kesalahan yang sama, solusinya adalah: Pengaturan Bangun -> Tautan -> Tautan Tautan Lainnya -> Tambahkan -lLibraryName_$(PLATFORM_NAME)duntuk Debug , dan tambahkan -lLibraryName_$(PLATFORM_NAME)untuk Rilis
George
37

bagi saya masalahnya ternyata kerangka kerja yang hilang. Setelah saya menambahkan mereka, itu berhasil.

verma
sumber
Ini sepertinya merupakan pukulan panjang karena tidak benar-benar cocok dengan pesan kesalahan yang saya dapatkan tetapi menambahkan kerangka kerja dependen yang disarankan di situs SocketRocket memperbaikinya juga untuk saya.
Pat
Bahkan jika Anda menambahkan kerangka kerja melalui cocoapods ini bisa terjadi. Saya harus menambahkannya secara manual sebagai kerangka kerja juga. Terima kasih!
FBente
Kerangka yang saya tambahkan membutuhkan Kerangka lain untuk ditambahkan sebelum itu akan dibangun. Jika Anda menambahkan Framework, periksa untuk memastikan Anda telah menambahkan Framework yang mungkin diperlukan
Dave Patrick
29

Periksa properti yang valid hanya Arsitektur dan Bangun Arsitektur Aktif.

masukkan deskripsi gambar di sini

Akshay
sumber
1
dapatkah Anda memberi tahu saya cara membuka jendela opsi ini di Xcode 4.2
Anand
Jika ini tidak membantu, lihat jawaban Allen Pike di bawah ini.
MattyG
Baik jawaban ini maupun jawaban Allen membantu saya. Saya benar-benar harus memeriksa kedua hal: Kompilasi Sumber dan Bangun Arsitektur Aktif Saja. Terima kasih banyak kawan!
Bogdan
@ Dan Mereka berada dalam Pengaturan Bangun untuk target.
penyelamat
18

jika Anda menggunakan cocoapods, pastikan pengaturan build target Anda berisi $ (diwarisi) di bagian flag linker lainnya

masukkan deskripsi gambar di sini

Tim
sumber
10

Apakah kerangka kerja Anda dikompilasi untuk armv (x)? Sepertinya saya dikompilasi untuk i386, kode mana yang tidak akan berjalan pada perangkat iOS. Atau kalau tidak, ini dikompilasi untuk armv (x) dan Anda mencoba menjalankannya di simulator, yaitu kode i386. Pastikan, dengan menggunakan pengaturan build Akshay yang ditampilkan di atas, bahwa kerangka kerja Anda dikompilasi dengan benar untuk chip yang akan Anda jalankan.

Owen Hartnett
sumber
Diurutkan. saya hanya perlu drag and drop framework forlder ke forlder proyek saya di xCode. Terima kasih
Mann
apakah mungkin untuk menyusun kerangka kerja agar berjalan di kedua perangkat iOS dan simulator secara bersamaan? atau haruskah saya selalu memilih hanya satu opsi?
Aleksey Tsyss
Apakah Anda berbicara tentang membuka dua jendela untuk proyek yang sama, dan mengatur satu untuk dijalankan pada simulator dan yang lainnya pada perangkat?
Owen Hartnett
7

Jika Anda mengimpor beberapa proyek lain dalam xcode dan jika proyek saat ini dan impor keduanya memiliki file yang sama di sumber Compiler maka hapus saja file yang sama dalam proyek saat ini di pengaturan "Build phase '. Ini berhasil untuk saya.

star18bit
sumber
4

Ya ini terkait dengan apa yang dikatakan allen ... cari TargetMembership di bagian Utilities dari file sumber. ada kotak centang yang mengaitkan file itu ke proyek. Memeriksa ini memecahkan masalah ini untuk saya juga.

yeahdixon
sumber
Saya memodifikasi semua pengaturan lain, tetapi ini adalah yang akhirnya memperbaikinya untuk saya. Terima kasih!
Alec Thomas
4

Mungkin juga Anda kehilangan tautan ke Perpustakaan Biner, periksa Bangun Fase di Targes Anda, tambahkan pustaka yang diperlukan, lalu Produk> Produk Bersih> Bangun

Itu juga harus berhasil!

Gabriel Ramirez
sumber
4

Saya memiliki masalah ini ketika saya membuka proyek yang sama dua kali, hanya satu proyek yang asli dan yang lainnya diklon dari git url.

'Produk'> 'Bersihkan' menyelesaikan masalah.

kraftydevil
sumber
4

Saya juga menemukan masalah ini dan saya memperbaikinya dengan memeriksa apakah sumber kompilasi dan tautan biner dengan pustaka berisi semua file / pustaka / kerangka kerja yang saya butuhkan.

masukkan deskripsi gambar di sini

yujohnnyzhou
sumber
4

Ketika saya mengalami masalah yang sama seperti ini:

Simbol yang tidak terdefinisi untuk arsitektur i386:

_OBJC_CLASS _ $ _ SKPSMTPMessage, dirujuk dari: objc-class-ref di ConfirmController.o

Ternyata saya hanya lupa menambahkan framework. Itu QuartzCore.framework tepatnya.

Mitch Viray
sumber
@JayprakashDubey Tanya Mitch, tolong
D_D
4

coba yang terakhir ini:

jadi saya mencoba semua saran di halaman ini .. tidak ada yang berhasil .. Cara masalah saya dimulai adalah dengan mengikuti langkah-langkah dalam ini tutorial yang mengajarkan cara menautkan pustaka statis. Dengan proyek sampel saya instruksi bekerja dengan baik .. tetapi kemudian pada proyek saya yang sebenarnya saya mulai mendapatkan kesalahan di atas.

Jadi apa yang saya lakukan adalah pergi melalui setiap langkah dari tutorial tersebut dan dibangun setelah setiap langkah .. baris yang menyinggung ternyata menjadi yang ini: menambahkan -all_load untuk membangun pengaturan-> flag linker lainnya

ternyata flag ini direkomendasikan pada suatu waktu untuk menautkan kategori ke pustaka statis .. tetapi kemudian ternyata flag ini tidak lagi diperlukan Xcode 4.2+ .. (berlaku juga untuk flag -force_load .. yang juga direkomendasikan di posting lain ) ..

abbood
sumber
3

Ketika saya mengalami masalah yang sama, saya lupa menambahkan "versi pustaka yang dikompilasi (dengan ekstensi .a)". Biasanya kami menambahkan perpustakaan proyek yang diimpor dalam Ketergantungan Target dalam Build Phases, tetapi kami lupa menambahkan "compiled library" di Link Binary dengan Libraries di Build Phases.

Balamurugan
sumber
3

Menambahkan apa yang berhasil untuk saya jika orang lain memiliki masalah yang sama dan berakhir di sini. Saya memiliki proyek yang lebih tua yang pengaturan CLANG_ENABLE_MODULES diatur ke Tidak. Setelah frustrasi selama berjam-jam, saya membandingkannya dengan proyek yang sedang berjalan dan ternyata saya telah mengaktifkan Set Modul ke no di bawah pengaturan build LLVM saya. Mengatur ini ke Ya menyelesaikan masalah saya dan aplikasi dibangun dengan baik.

Pengaturan Proyek -> Pengaturan Bangun -> cari 'Modul' dan Perbarui Aktifkan Modul (C dan Objective-C) ke YES.

jlichti
sumber
Memperbaiki indah! Ini sangat membantu saya! Saya memiliki proyek pod lama dan setiap kali saya menambahkan pod baru kesalahan ini akan terjadi. Terima kasih!!!
DiscDev
2

Saya tidak menambahkan "-all_load -lstdc ++" ke Other Linker Flags dalam pengaturan build dan saya dapat meluncurkan sim tanpa kesalahan tetapi saya tidak mendapatkan output log MonkeyTalk ketika diluncurkan dan skrip sebelumnya yang saya tulis yang digunakan untuk menghubungkan sekarang menunjukkan tombol putar telah dinonaktifkan. Output dari MT IDE ditampilkan sebagai "Koneksi diatur ke iOS Simulator", tetapi tidak dapat memilih tombol run / play.

Proyek asli memiliki "ObjC -all_load" di Other Linker Flags dan ketika saya menambahkan "-all_load -lstdc ++" bersamaan dengan itu saya mendapat pesan kesalahan bahwa posting ini adalah tentang. Ketika saya menghapus "ObjC -all_load" dan hanya menambahkan "-all_load -lstdc ++" proyek yang dibangun, tetapi masih tidak ada logout monyet keluar dimasukkan sebagai konfirmasi di konsol

Laser Hawk
sumber
2

Mungkin saja Anda menggunakan perpustakaan yang hanya dikompilasi untuk perangkat keras NYATA. Misalnya, jika Anda menggunakan perpustakaan Bluetooth seperti Zephyr HxM Smart, itu mungkin tidak akan dikompilasi pada simulator, dan hanya dimaksudkan untuk berjalan pada perangkat nyata.

DiscDev
sumber
1

Mengalami masalah serupa dengan iOS 6. Mampu menyelesaikannya dengan menambahkan storekit.framework ke "Link Binary with Libraries" di bagian fase build.

Sekarang, itu berfungsi seperti pesona.

Troy
sumber
1

saya memiliki masalah yang sama dengan 7 kesalahan ketika saya menambahkan PSTCollectionviewcontroller. Satu solusi untuk masalah ini adalah memeriksa "xcode -> build phasa -> compile sources" di sini tambahkan semua file ".m" Anda .. Saya harap Anda ini posting akan membantu pengguna di masa mendatang.

Naveen
sumber
1

Di tambang, saya menggunakan Cocoapods untuk proyek Augmented Reality dan apa yang saya temukan adalah ketika Anda mengimplementasikan cocoapods dan membuka .workspace proyek Anda, Anda berakhir dengan target Proyek Xcode dan target Pod yang Anda implementasikan di dalam file yang sama. Apa yang terjadi adalah bahwa beberapa .m sedang digunakan oleh keduanya. Setelah saya menghapus duplikat untuk target Xcode di Build Phases >> Compile Sources, itu bekerja dengan baik.

Joao Paulo
sumber
1

Saya menemukan pesan yang SANGAT menyesatkan ini ketika mencoba meningkatkan ke perpustakaan Google Analytics yang baru.

Dalam kasus saya masalahnya adalah DUA SALINAN KONFLIK perpustakaan. Mereka berada di folder yang berbeda tetapi keduanya terdaftar di Jalur Bangun Perpustakaan Aplikasi saya (di bawah Pengaturan Bangun).

Memindahkan semua file perpustakaan yang sudah usang keluar dari folder akhirnya melakukan trik dan membuat pesan kesalahan misterius hilang.

bkbeachlabs
sumber
1

Periksa bahwa semua sumber daya bundel Anda disalin dalam fase pembuatan.

Arpan Dixit
sumber
1

Produk => Bersihkan melakukan trik untuk saya

YogevSitton
sumber
1

Perubahan dalam arsitektur aktif bekerja untuk saya, Salah satu lib saya menggunakan i386.

Dalam pengaturan build >> ubah Build Arsitektur Aktif Hanya ke Ya dari TIDAK

Ini berhasil untuk saya. Semoga ini bisa membantu orang lain juga.

masukkan deskripsi gambar di sini

Satish Mavani
sumber
"dari TIDAK ke YA" lebih mudah dimengerti. Apa pun, ini berhasil.
Victor Laerte
0

Jawabannya adalah Anda cukup drag dan drop folder ke proyek dan klik copy.

Mann
sumber
0

Saya mendapat pesan ini ketika saya menyeret dan menjatuhkan beberapa file sumber dari proyek lain. Ketika saya menghapusnya dan kemudian menambahkannya melalui "Tambah File ..." dari menu File, itu dibangun tanpa kesalahan.

RyeMAC3
sumber
0

Saya memiliki kesalahan yang sama dengan NSManagedObject dan itu karena saya menggunakan Core Data tetapi tidak memiliki kerangka Data Core dalam Build Phases - Link Binary With Libraries, seperti beberapa orang lain telah menjawab

Sam
sumber
Selamat datang di SO Sam. Saat menjawab pertanyaan, coba tambahkan wawasan, penelitian, atau kode baru yang belum ada di jawaban lain. Jika Anda hanya ingin membagikan jawaban lain yang sesuai untuk Anda, cobalah unduh atau komentari jawaban mereka alih-alih memposting jawaban duplikat.
butch
0

Anda bisa mendapatkan jenis kesalahan ini jika Anda menambahkan perpustakaan pihak ketiga dalam proyek Anda yang membutuhkan kerangka kerja asli yang tidak termasuk dalam proyek Anda.

Anda perlu melihat di dalam file .h dan .m dari perpustakaan Anda yang baru ditambahkan dan melihat kerangka kerja apa yang diperlukan, kemudian sertakan kerangka kerja itu dalam proyek Anda (Target> Bangun Fase> Tautan Biner Dengan Perpustakaan).

Cosmin
sumber
0

Coba hapus kerangka kerja, bersihkan proyek, tambahkan kembali dan kompilasi. Atau Hapus kelas yang telah ditambahkan oleh xcode dalam sumber kompilasi, bersihkan proyek, tambahkan kembali lalu bangun.

Saif
sumber
0

Ingatlah bahwa Anda dapat meletakkan beberapa makro di pengontrol tampilan apa pun yang memanggil file yang sudah Anda hapus.

Aplikasi tidak akan menampilkan kesalahan apa pun sampai Anda membangun aplikasi Anda, itu akan membuang kesalahan dalam fase kompilasi dalam file .o.

Ingatlah untuk menghapus MACRO apa pun yang memanggil ke file yang sudah Anda hapus.

Terima kasih :)

Abo3atef
sumber
0

Selain apa yang Allan lakukan, menambahkan kelas yang hilang, saya mengikuti solusi @ emdog4 dan menambahkan perpustakaan Core Data dengan pergi ke Build Phases di Xcode dan di bawah 'Link Binary with Libraries' dengan mengklik tanda + dan memilih 'CoreData.framework' . Ini menyelesaikan kesalahan saya

malkoty
sumber