Apple Mach-O Linker Error saat kompilasi untuk perangkat

238

Saya baru saja memutakhirkan ke xcode 4.0 dan saya tidak bisa lagi menyebarkan ke iPhone, saya mendapatkan Kesalahan Apple Mach-O Linker, masih berfungsi untuk simulator sekalipun.

    Ld /Users/yveswheeler/Library/Developer/Xcode/DerivedData/iParcel-fkeqjcjcbbhjwhdssjptkdxzzzxh/Build/Intermediates/iParcel.build/Debug-iphoneos/iParcel.build/Objects-normal/armv7/iParcel normal armv7
    cd /Users/yveswheeler/iParcel
    setenv IPHONEOS_DEPLOYMENT_TARGET 3.2
    setenv PATH "/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin:/Developer/usr/bin:/usr/bin:/bin:/usr/sbin:/sbin"
    /Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/g++-4.2 -arch armv7 -isysroot /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS4.3.sdk -L/Users/yveswheeler/Library/Developer/Xcode/DerivedData/iParcel-fkeqjcjcbbhjwhdssjptkdxzzzxh/Build/Products/Debug-iphoneos -F/Users/yveswheeler/Library/Developer/Xcode/DerivedData/iParcel-fkeqjcjcbbhjwhdssjptkdxzzzxh/Build/Products/Debug-iphoneos -filelist /Users/yveswheeler/Library/Developer/Xcode/DerivedData/iParcel-fkeqjcjcbbhjwhdssjptkdxzzzxh/Build/Intermediates/iParcel.build/Debug-iphoneos/iParcel.build/Objects-normal/armv7/iParcel.LinkFileList -dead_strip -all_load -ObjC -lxml2 -miphoneos-version-min=3.2 -framework UIKit -framework CoreGraphics -framework QuartzCore /Users/yveswheeler/Library/Developer/Xcode/DerivedData/iParcel-fkeqjcjcbbhjwhdssjptkdxzzzxh/Build/Products/Debug-iphoneos/libThree20.a /Users/yveswheeler/Library/Developer/Xcode/DerivedData/iParcel-fkeqjcjcbbhjwhdssjptkdxzzzxh/Build/Products/Debug-iphoneos/libThree20Core.a /Users/yveswheeler/Library/Developer/Xcode/DerivedData/iParcel-fkeqjcjcbbhjwhdssjptkdxzzzxh/Build/Products/Debug-iphoneos/libThree20Network.a /Users/yveswheeler/Library/Developer/Xcode/DerivedData/iParcel-fkeqjcjcbbhjwhdssjptkdxzzzxh/Build/Products/Debug-iphoneos/libThree20Style.a /Users/yveswheeler/Library/Developer/Xcode/DerivedData/iParcel-fkeqjcjcbbhjwhdssjptkdxzzzxh/Build/Products/Debug-iphoneos/libThree20UI.a /Users/yveswheeler/Library/Developer/Xcode/DerivedData/iParcel-fkeqjcjcbbhjwhdssjptkdxzzzxh/Build/Products/Debug-iphoneos/libThree20UICommon.a /Users/yveswheeler/Library/Developer/Xcode/DerivedData/iParcel-fkeqjcjcbbhjwhdssjptkdxzzzxh/Build/Products/Debug-iphoneos/libThree20UINavigator.a -framework AddressBook -lz.1.2.3 -framework Foundation -framework CFNetwork -framework MobileCoreServices -framework SystemConfiguration -framework MessageUI -framework AudioToolbox -o /Users/yveswheeler/Library/Developer/Xcode/DerivedData/iParcel-fkeqjcjcbbhjwhdssjptkdxzzzxh/Build/Intermediates/iParcel.build/Debug-iphoneos/iParcel.build/Objects-normal/armv7/iParcel

arm-apple-darwin10-g++-4.2.1: /Users/yveswheeler/Library/Developer/Xcode/DerivedData/iParcel-fkeqjcjcbbhjwhdssjptkdxzzzxh/Build/Products/Debug-iphoneos/libThree20.a: No such file or directory
arm-apple-darwin10-g++-4.2.1: /Users/yveswheeler/Library/Developer/Xcode/DerivedData/iParcel-fkeqjcjcbbhjwhdssjptkdxzzzxh/Build/Products/Debug-iphoneos/libThree20Core.a: No such file or directory
arm-apple-darwin10-g++-4.2.1: /Users/yveswheeler/Library/Developer/Xcode/DerivedData/iParcel-fkeqjcjcbbhjwhdssjptkdxzzzxh/Build/Products/Debug-iphoneos/libThree20Network.a: No such file or directory
arm-apple-darwin10-g++-4.2.1: /Users/yveswheeler/Library/Developer/Xcode/DerivedData/iParcel-fkeqjcjcbbhjwhdssjptkdxzzzxh/Build/Products/Debug-iphoneos/libThree20Style.a: No such file or directory
arm-apple-darwin10-g++-4.2.1: /Users/yveswheeler/Library/Developer/Xcode/DerivedData/iParcel-fkeqjcjcbbhjwhdssjptkdxzzzxh/Build/Products/Debug-iphoneos/libThree20UI.a: No such file or directory
arm-apple-darwin10-g++-4.2.1: /Users/yveswheeler/Library/Developer/Xcode/DerivedData/iParcel-fkeqjcjcbbhjwhdssjptkdxzzzxh/Build/Products/Debug-iphoneos/libThree20UICommon.a: No such file or directory
arm-apple-darwin10-g++-4.2.1: /Users/yveswheeler/Library/Developer/Xcode/DerivedData/iParcel-fkeqjcjcbbhjwhdssjptkdxzzzxh/Build/Products/Debug-iphoneos/libThree20UINavigator.a: No such file or directory
Command /Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/g++-4.2 failed with exit code 1
CodeVomit
sumber
38
Apa apaan?! Begitu banyak masalah berbeda untuk pesan kesalahan yang sama . Kerja bagus Apple!
Iulian Onofrei
18
"ERROR: An Error telah terjadi" akan lebih membantu :))
Aviram Netanel
Lihatlah peringatan yang dilontarkan oleh Linker sebelum kesalahan; ini dapat mengarah pada solusi yang lebih baik / lebih spesifik.
Pro Q

Jawaban:

216

Berikut ini adalah solusi permanen. Proyek yang biasanya ditimpa dapat menyebabkan perkembangan ini. Coba metode ini.

-UPDATE - Kesalahan dentang - Kesalahan Mach-O Linker

Dalam beberapa kasus, jendela log kesalahan menampilkan kesalahan .xctest, untuk memperbaikinya

-> Pilih proyek Anda

-> Di samping ini (tepat sebelum tab General) pilih file projectTest Anda dari dropdown

-> Ada satu opsi (seperti ProjNameTests)

-> Di Aplikasi Host, pilih proyek Anda dari dropdown hanya jika itu menunjukkan kustom

DIBUAT!

masukkan deskripsi gambar di sini

Metode lama dihapus

Gajendra K Chauhan
sumber
4
Jika saya menghapus jalur pencarian Kerangka daripada yang saya dapatkan tidak dapat menemukan file header
Danpe
62
Saya pikir saya tidak mengerti. Apa yang harus saya lakukan…?
Fabian
1
@fabian Lewati saja dan coba solusi alternatif :-)
Gajendra K Chauhan
4
Selamatkan kawan saya. Duduk di depan bos saya, harus menunjukkan kepadanya aplikasi yang sedang saya kerjakan, dan saya mendapat kesalahan tautan ini. Saya pergi jika belum mendarat di sini: D
Saraz
2
di mana aplikasi host pada langkah terakhir?
Kartiikeya
195

Saya memiliki masalah yang sama dan masalahnya adalah saya secara tidak sengaja mengimpor file .m bukannya .h dalam file implementasi - semoga membantu

Daniel
sumber
1
Tidak mungkin menemukan kesalahan! Coba saja masing-masing dan setiap solusi
AsifHabib
Ini tidak benar, saya sudah mencoba hal yang sama dalam proyek baru dan masih mendapatkan kesalahan yang sama.
Hemang
Buka bagian Pengaturan proyek dan Bangun fase, pastikan Anda tidak memiliki file .m di bagian "Salin Sumber Daya Bundel" alih-alih "Sumber Kompilasi". yang bekerja untuk saya
LuAndre
Tidak mungkin menemukan solusinya. Saya tidak tahu apa yang akan saya lakukan ...
Markus
Anda menyelamatkan hidup saya. Terima kasih banyak!
Isaac
73

Baru saja mengalami masalah yang sama.

Solusinya (untuk saya) = periksa kerangka kerja Anda.

Dalam kasus saya, saya telah menambahkan kelas yang terkait dengan CoreData tanpa "CoreData.framework". Menambahkannya memecahkan keluhan MACH_O.

Dante Cesa
sumber
6
Ini terjadi juga ketika Anda menautkan kembali pustaka yang tidak ada dalam rilis SDK terbaru. Katakanlah Anda terhubung dengan libz.1.2.3 dan SDK termasuk 1.2.5. Periksa kerangka kerja Anda adalah saran yang sangat bagus! Dante terima kasih!
SlowTree
Terima kasih SlowTree, simpan saran memecahkan pengalaman saya dengan kerusakan tautan ini. libz.1.2.3 hingga libz.1.2.5;
Tom Pace
2
Cocoapods menautkan dua libPods.afile untuk saya (karenanya simbol duplikat). Terima kasih, Dante!
Nick Merrill
Iya. File .a dihapus dan ditambahkan lagi dari tautan. Ini berhasil!
Balasubramanian
61

buka file .xcworkspace bukan .xcodeproj. Saya ulangi file .xcworkspace yang terbuka. Semua kesalahan Anda akan hilang.

mahi
sumber
1
Wow, itu pasti salah satu pesan debug paling gila. Saya benar-benar tidak akan pernah menduga bahwa ini adalah alasan berdasarkan pesan yang diberikan.
Joseph Casey
1
Melakukan trik untuk saya karena ada perpustakaan eksternal yang tidak termasuk dalam .xcodeproj. ada hubungannya dengan cocoapods
Sjoerd de Wit
Ini berhasil untuk saya. Seperti kata @SjoerddeWit - inklusi cocoapods mengharuskan pembukaan .xcworkspace daripada .xcodeproj.
Cody Richmond
Selamatkan hari saya! +1
Bruno Monteiro
Saya telah mengekspor proyek persatuan ke xcode dan tidak ada file .xcworkspace
Ayush Malviya
36

Re: Masalah sebagaimana diuraikan dalam judul:

Hanya untuk berjaga-jaga jika ada orang yang melewatkan ...

Saya menemukan kesalahan ini setelah menginstal Xcode4 versi baru dan menyeret file yang ada ke proyek baru. Saya gagal menemukan bahwa kotak centang 'tambahkan ke target' dibiarkan tidak dicentang di dialog 'Pilih opsi untuk menambahkan file:'. Mengoreksi kelalaian saya di Target> Build Phases> Compile Sources menyelesaikan masalah.

cate
sumber
Trik ini berhasil untuk saya. Terima kasih. Saya menghapus semua direktori kompilasi dan membangun kembali proyek.
Vivek Gyaneshwar
34

Menu> Produk> Bersih, inilah yang membuatnya berfungsi. Saya tidak yakin tentang orang lain. Saya menambahkan foto untuk ditampilkan.

masukkan deskripsi gambar di sini

dnaatwork.com
sumber
1
Luar biasa. Sejauh ini solusi termudah yang bisa saya temukan.
Vincent van Leeuwen
29

Kesalahan aneh. Bagi saya, saya baru saja membersihkan dan memulai ulang Xcode dan masalahnya hilang.

p.pad
sumber
26

Perbaiki: Bangun Pengaturan> Aktifkan Bitcode> Tidak masukkan deskripsi gambar di sini

Sebastián Lara
sumber
Tembakan Suci ..! Ini Berhasil untuk saya :)
Droid Genie
24

Tidak satu pun dari jawaban ini yang membantu saya. Kemudian saya mencoba menginstal ulang Cocoapods:

pod deintegrate

pod install

Masalah terpecahkan!

Johannes
sumber
Saya tidak yakin di mana putuskan sambungan dengan pod & xcode, tetapi sering kali itu adalah perjuangan untuk memastikan file pod membuatnya ke folder turunan data. Ini sepertinya memperbaiki masalah itu. Saya berharap saya bisa memulai jawaban ini ..
Jacksonkr
20

Masalahnya adalah bahwa di XCode 4, dependensi tidak menganggap pengaturan arsitektur proyek utama, seperti yang mereka lakukan sebelumnya di XCode 3. Saya harus melalui semua dependensi saya mengaturnya untuk arsitektur yang benar.

CodeVomit
sumber
2
Terima kasih! Saya selesai disesatkan oleh fakta bahwa pesan kesalahan dari linker mengeluh tentang "File tidak ditemukan", bukan "File ditemukan, tapi saya tidak dapat menggunakannya ...", dan sedang berkeliaran melalui pengaturan xcode mencari pencarian perpustakaan jalan. Tetapi ini berhasil bagi saya. Dan jika Anda mengalami masalah ini, pos lain ini juga terkait: stackoverflow.com/questions/2999844/three20-and-ios-4 . Juga, blog ringkasan yang bagus ini: amirnaor.com/?p=112
Rob
13

Saya memiliki hal yang sama dan berhasil menyelesaikannya.

Dalam preferensi xcode , tab lokasi mengubah nilai di bawah membangun lokasi menjadi " Place build products in locations specified by targets".

Wolfert
sumber
Terima kasih Wolfert, sudah mencobanya tetapi masih ada 1.250 Apple Mach-O Linker Warnings dan tidak ada kemajuan. Apakah Anda melakukan hal lain untuk memperbaikinya? Cheers
Terima kasih Wolfert! Anda menghemat banyak waktu saya.
Sunil Targe
6
Opsi tidak tersedia di XCode 5.1
Hemang
13

Saya berjuang dengan ini sebentar, dan dalam kasus saya itu akhirnya menjadi Pengaturan Bangun di bawah Jalur Pencarian yang disebut FRAMEWORK_SEARCH_PATHS. Itu membantu saya memilih tombol "Level", yang tampaknya membandingkan pengaturan proyek, target, dan "Terselesaikan" saya. Saya melihat bahwa pengaturan target saya entah bagaimana mengesampingkan default "$ (diwarisi)", dan nilai yang diganti adalah apa yang XCode "selesaikan" pengaturan menjadi. Ketika saya menghapus override, yang dalam hal ini menentukan 3,2 sdk, kesalahan linker hilang - seperti yang beberapa baru saja muncul peringatan tentang setiap kelas di mana saya memanggil metode post-4.0.

Tentang peringatan itu - saya tidak pernah melihatnya sebelum saya menambahkan kerangka kerja MessageUI untuk perubahan baru-baru ini. Saya curiga, tetapi tidak tahu pasti, bahwa ketika saya menambahkan kerangka kerja itu, XCode mencoba melakukan sesuatu yang pintar dengan menambahkan penggantian itu ke target saya. Saya tidak melakukannya secara eksplisit pada titik mana pun. Peringatan itu, misalnya, tentang metode URLByAppendingPathComponent dari NSURL, yang tidak muncul sampai SDK 4.0. Sebelum menambahkan kerangka kerja MessageUI, saya tidak pernah mendapatkan peringatan itu. Dan karena saya menghapus override, saya tidak lagi mendapatkannya.

tigerswim19
sumber
11

Saya punya masalah ini dan mengimpornya QuartzCorediperbaiki.

jmosesman
sumber
8

Mengubah "Build Hanya Arsitektur Aktif" menjadi Ya di CordovaLib.xcodeproj -> Pengaturan Build melakukan trik untuk saya. sebelumnya aplikasi berjalan di simulator, tetapi tidak di perangkat.

Nishanth Nair
sumber
7

Anda mungkin perlu memperbarui pengaturan bangunan Anda.

Verifikasi versi target iOS dan arsitektur prosesor, karena Anda mungkin tidak memiliki SDK lama dengan XCode 4.

Anda mungkin melihat «SDK Hilang» pada pengaturan build. Ubah itu menjadi apa pun yang berlaku.

Dibuat
sumber
Itu cukup banyak hal pertama yang saya lakukan setiap kali saya memutakhirkan xcode. Kali ini bukan masalahnya.
CodeVomit
7

Saya memiliki masalah yang sama: hanya secara tidak sengaja menghapus file .m, sementara .h berada di proyek. Masalahnya hilang ketika saya mengembalikan file .m.

Misha Karpenko
sumber
6

Periksa untuk memastikan bahwa Anda tidak memiliki jalur pencarian kerangka kerja tertentu yang ditentukan. jika Anda pergi ke info tentang target dan hanya menghapus entri jalur pencarian kerangka kerja itu harus menggunakan default untuk versi penyebaran yang ditentukan.

Grady Player
sumber
5

Saya hanya mencoba membuat category classfile dan mendapatkan masalah aneh ini..dan akhirnya ....

Cara yang salah untuk membuat kelas kategori yang menyebabkan masalah:

New File-> Cocoa Touch-> Objective-C class, maka saya memodifikasi nama file menjadi Kategori Kategori suka nama .. (yaitu OriginalClass_CategoryName.h/muntukOriginalClass+CategoryName.h/m , dan juga memodifikasi konten dalam file).

Jalan yang benar di sini:

New File-> Cocoa Touch-> Objective-C category, dan itu akan secara otomatis menghasilkan file (OriginalClass+CategoryName.h/m ).

Oh, betapa bodohnya aku !!

Kjuly
sumber
5

Jika Anda menggunakan CoreData, dan Anda menggunakan XCode untuk menghasilkan subclass NSManagedObject untuk entitas Anda, pastikan Anda hanya menghasilkan satu untuk setiap entitas.

Masalah saya adalah bahwa ia menghasilkan beberapa subclass NSManagedObject untuk entitas yang sama (dan menempatkannya di folder yang berbeda).

Saya baru saja menghapus semuanya dan membuat ulang subclass NSManagedObject.

Flaviu
sumber
5

Untuk menambahkan ke daftar hal-hal aneh yang memperbaiki masalah ini ...

Saya punya beberapa variabel CGFloat const dalam file header global seperti itu

const NSInteger  globalInteger1 = 2;
const NSInteger  globalInteger2 = 3;

Saat saya menghapus ini, semuanya baik-baik saja :)

sherlock
sumber
1
Masalah WEIRD saya ada di file .pch or constants.h Saya telah menyatakan sebuah konstanta sebagai NSString * const kInitiaNotification = @ "kInitialNotification"; tanpa menyebutkan "statis" pada awalnya
Mazen Kasser
Saya memiliki masalah tepat setelah saya berubah dari NSString static *key = @"someKey"keconst NSString *key = @"someKey"
TonyTony
5

Saya memiliki masalah yang persis sama hanya karena saya memiliki dua konstanta yang sama di kelas yang berbeda. Anda juga dapat memiliki masalah ini jika Anda mengimpor file .m bukan file .h

Adela Toderici
sumber
Anda menghemat hari saya !!
teck wei
@teckwei Anda dapat menekan panah Suara atas: D
Adela Toderici
4

Saya memiliki masalah yang sama, dan saya menyelesaikannya. Dalam kasus saya, pengaturan "arsitektur" menyebabkan masalah. Dalam file proyek saya, tab Bangun Pengaturan, Arsitektur ditetapkan ke armv6. Saya mengubahnya ke Standar (armv7), lakukan pembersihan dan bangun. Lalu berhasil!

Kim Jin
sumber
4

Dalam kasus saya masalahnya adalah arsitektur yang berbeda ditentukan di bawah target yang berbeda. Saya sedang membangun target aplikasi saya dengan armv6, armv7 dan cocos2d dengan Standar (amrv7). Pergilah ke pengaturan build dan pastikan arsitektur Anda menyetujui semua target.

ChrisP
sumber
4

Saya memecahkan masalah ini terlalu aneh!

Pergi ke Target > Bangun Fase > Tautkan Biner dengan perpustakaan :

Hapus semua kerangka kerja Anda dan tambahkan lagi!

Semoga berhasil untuk Anda!

Rudi
sumber
solusi yang cukup buruk
SleepsOnNewspapers
Tidak bisa dijawab ... tidak terlalu logis
LKM
Saya memeriksa pesan kesalahan dan menemukan bahwa itu adalah salah satu kerangka kerja, jadi saya menghapus kerangka itu dan menambahkannya lagi, tidak semua kerangka kerja tetapi hanya kerangka itu.
Oluwatobi Omotayo
4

Untuk bahasa Swift ...

Saya mendapatkan kesalahan ini "ld: file terlalu kecil (panjang = 0) ...."

Dalam kasus saya, saya hanya membersihkan proyek dan kemudian membangunnya kembali ..

Langkah:-

1) Proyek goto -> Bersih

2) Proyek goto -> Build

Semoga ini membantu..

Niks
sumber
Bekerja untukku. Terjadi ketika saya mengganti perangkat dari iPhone 6 ke iPhone 4S.
racl101
Bekerja untuk saya juga. Terima kasih banyak
Lee
4

Ini melakukan trik untuk saya:

Pergi ke

1) Produk> bersih

2) Windows> Proyek

3) Pilih proyek Anda dan klik " Hapus " Data yang diperoleh

4) Produk> Bangun

pengguna4886069
sumber
3

Satu kemungkinan: Nyalakan "Pengupasan kode mati" di pengaturan build Xcode 4.

Kemungkinan lain: Bisa jadi Anda beralih menggunakan LLVM untuk beberapa kerangka kerja yang sebelumnya menggunakan GCC. Kembali ke GCC (atau LLVM GCC) dapat menyingkirkan peringatan tersebut.

Enchilada
sumber
3

Saya salah mendefinisikan konstanta baru dengan nama yang sama dengan konstanta yang ada di file yang berbeda dan itu menyebabkan kesalahan ini bagi saya menggunakan xCode 4.3.1. xCode tidak mengeluh tetapi kompiler tidak menyukainya.

moliveira
sumber
3

Saya dapat memperbaiki kesalahan ini dengan mengedit "Jalur Pencarian Perpustakaan"

Itu dipotong di tempat pertama karena saya telah memindahkan beberapa folder, dan yang akhirnya memberikan pengaturan build saya dua jalur pencarian yang berbeda karena mereka secara otomatis ditambahkan ke pengaturan build Anda ketika Anda menghubungkan perpustakaan / kerangka kerja, tetapi mereka tidak selalu dihapus.

Jadi, jika Anda memindahkan pustaka / kerangka kerja yang ditautkan ke direktori yang berbeda dan menautkannya kembali, Anda harus mengedit jalur pencarian secara manual.

Anda mungkin bisa mengelak dengan menghapus library / framework sebelum memindahkannya, tapi saya belum mengujinya.

Rembrandt Q. Einstein
sumber