Помилка Linker Apple Mach-O під час компіляції для пристрою


238

Щойно я перейшов на xcode 4.0 і більше не можу розгорнутись на iPhone, я отримую помилку Linker Apple Mach-O, але він все ще працює для тренажера.

    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

38
Якого біса?! Стільки різних проблем для одного і того ж повідомлення про помилку. Гарна робота Apple!
Юліан Онофрей

18
"Помилка: сталася помилка" була б кориснішою :))
Aviram Netanel

Подивіться на попередження, які Лінкер виплюнув перед помилкою; це може призвести до кращого / конкретнішого рішення.
Pro Q

Відповіді:


216

Ось постійне рішення. Загальний перезапис проекту може спричинити цю проблему. Спробуйте цей метод.

-UPDATE - Помилка Clang - Помилка Mach-O Linker

У деяких випадках у вікні журналу помилок відображається .xctest помилка, щоб її виправити

-> Виберіть проект

-> Поруч із цим (безпосередньо перед вкладкою Загальні) виберіть зі спадного файла файл ProjectTest

-> Є один варіант (наприклад, ProjNameTests)

-> У хост-програмі виберіть проект зі спадного меню лише у тому випадку, якщо він відображається на замовлення

Зроблено!

введіть тут опис зображення

Старий метод видалений


4
Якщо я видаляю Шлях пошуку Framework, ніж я не можу знайти файл заголовка
Danpe

62
Я думаю, я цього не розумію. Що я повинен зробити…?
фабіан

1
@fabian Просто пропустіть і спробуйте альтернативне рішення :-)
Gajendra K Chauhan

4
Врятував мій день людина. Сидячи перед моїм начальником, мушу показати йому додаток, над яким я працюю, і я отримав цю помилку лінкера. Я пішов, якби не приземлився тут: D
Сараз

2
де знаходиться хост-додаток на завершальному кроці?
Картікея

195

У мене була така ж проблема, і проблема полягала в тому, що я випадково імпортував .m файл замість .h у файл реалізації - сподіваюся, що це допоможе


1
Неможливо знайти помилку! Просто спробуйте кожне рішення
AsifHabib

Це неправда, я намагався те ж саме в новому проекті і все одно отримую ту саму помилку.
Хеман

Перейдіть до розділу «Налаштування проекту» та «Фази збірки», переконайтесь, що у вас немає файлу .m у розділі «Копіювати ресурси ресурсу» замість «Компілювати джерела». що працювало на мене
LuAndre

Неможливо знайти рішення. Я не знаю, що я буду робити ...
Маркус,

Ти врятував мені життя. Дуже дякую!
Ісаак

73

Щойно наткнувся на те саме питання.

Рішення (для мене) = перевірити свої рамки.

У моєму випадку я додав класи, пов'язані з CoreData, без "CoreData.framework". Додавання це вирішило скаргу MACH_O.


6
Це трапляється і тоді, коли ви знову зв'язали бібліотеку, яка відсутня в останньому випуску SDK. Скажімо, ви пов’язали проти libz.1.2.3, а sdk включає 1.2.5. Перевірте свої рамки - це дійсно гарна пропозиція! Дякую, Данте!
SlowTree

Дякую SlowTree, збереження пропозиції вирішило мій досвід з цим збоєм лінкера. libz.1.2.3 до libz.1.2.5;
Том Пейс

2
Cocoapods зв'язав два libPods.aфайли для мене (звідси дублюючі символи). Спасибі, Данте!
Нік Меррілл

Так. Вилучені файли .a та додані знову з посилання. Це спрацювало!
Баласубраманян

61

відкрити .xcworkspace файл не .xcodeproj. Я повторюю відкритий файл .xcworkspace. Усі ваші помилки зникнуть.


1
Нічого собі, це має бути одним із найсумніших повідомлень про налагодження. Я б буквально ніколи не здогадувався, що це причина, що ґрунтується на наданому повідомленні.
Джозеф Кейсі

1
Зробив трюк для мене, тому що там була зовнішня бібліотека, яка не була включена до .xcodeproj. мав відношення до какаоподів
де Віт

Це працювало для мене. Як сказав @SjoerddeWit - включення cocoapods потребує відкриття .xcworkspace, а не .xcodeproj.
Коді Річмонд

Врятував мій день! +1
Бруно Монтейро

Я експортував проект єдності на xcode, і немає файлу .xcworkspace
Айуш Мальвія

36

Re: Проблема, як зазначено в назві:

Про всяк випадок, коли хтось пропустив очевидне ...

Я зіткнувся з цією помилкою після встановлення нової версії Xcode4 та перетягування існуючих файлів у новий проект. Я не помітив, що в діалоговому вікні "Вибір параметрів для додавання файлів:" не встановлено прапорець "Додати до цілей". Виправлення моїх упущень у цілях> фази збірки> джерела компіляції вирішили проблему.


Цей трюк спрацював для мене. Дякую. Я видалив усі каталоги компіляції та відновив проект.
Vivek Gyaneshwar

34

Меню> Продукт> Очистити, саме це змусило його працювати. Я не впевнений у всіх інших. Я додав рис для показу.

введіть тут опис зображення


1
Дивовижно. На сьогодні найпростіше рішення, яке я міг знайти.
Вінсент ван Левен

29

Химерна помилка. Для мене я просто очистив і перезапустив Xcode, і проблема пішла.



24

Жодна з цих відповідей мені не допомогла. Потім я спробував перевстановити Cocoapods:

pod deintegrate

pod install

Проблема вирішена!


Я не впевнений, де знаходиться роз'єднання з pods & xcode, але часто буває боротьба за те, щоб переконатися, що файли струків переходять у папку производных данных. Це, здається, вирішує цю проблему. Я б хотів, щоб я міг почати саме цю відповідь ..
Jacksonkr

20

Проблема полягала в тому, що в XCode 4 залежності не передбачають налаштування архітектури основного проекту, як це було раніше в XCode 3. Мені довелося пройти всі мої залежності, встановивши їх для правильної архітектури.


2
спасибі! Мене було введено в оману тим, що повідомлення про помилку від лінкера скаржиться на "Файл не знайдено", а не "Файл знайдено, але я не можу його використовувати ...", і блукав по налаштуваннях xcode, шукаючи пошук у бібліотеці стежки. Але це працювало для мене. І якщо у вас є ця проблема, цей інший пост також пов'язаний: stackoverflow.com/questions/2999844/three20-and-ios-4 . Також цей хороший підсумковий блог: amirnaor.com/?p=112
Роб

13

У мене було те саме і вдалося це вирішити.

У xcode налаштуваннях вкладці місцеположення змінено значення під розташуванням на " Place build products in locations specified by targets".


Дякуємо Волферту, спробував це, але все ще маю 1250 Apple Mach-O попереджень Linker і немає прогресу. Ви робили щось інше, щоб виправити це? Ура

Дякую Вулферту! ти врятував мої багато часу.
Sunil Targe

6
Опція недоступна в XCode 5.1
Hemang

13

Я трохи боровся з цим, і в моєму випадку це виявилося Налаштуванням збірки під Шляхами пошуку під назвою FRAMEWORK_SEARCH_PATHS. Це допомогло мені обрати кнопку "Рівні", яка, здавалося, порівнювала налаштування мого проекту, цілі та "Розв'язано". Я бачив, що моє цільове налаштування якимось чином перекриває типовий параметр "$ (успадковано)", і переосмислене значення було тим, що XCode "вирішив" налаштування. Коли я видалив переопределение, яке в цьому випадку вказало 3.2 sdk, помилки лінкера відійшли - як і деякі нещодавно з'явилися попередження про будь-які класи, де я викликав методи пост-4.0.

Щодо цих попереджень - я ніколи їх не бачив, перш ніж додати рамку MessageUI для недавньої зміни. Я підозрюю, але не знаю напевно, що коли я додав цю рамку, XCode намагався зробити щось розумне, додавши цю перевагу до моєї цілі. Я цього не робив явно в будь-який момент. Наприклад, попередження стосувалися методу URLByAppendingPathComponent NSURL, який з'являвся до sdk 4.0. До того, як додати рамку MessageUI, я ніколи не отримував цього попередження. А оскільки я зняв перезавантаження, більше не отримую їх.


11

У мене виникла ця проблема, і імпорт QuartzCoreїї виправлено.


8

Змінення "Тільки для активних архітектур" на Так на CordovaLib.xcodeproj -> Налаштування збірки зробило для мене свою справу. раніше додаток працював на тренажері, але не на пристрої.


7

Можливо, вам доведеться оновити налаштування збирання.

Перевірте цільову версію iOS та архітектуру процесора, оскільки у вас можуть бути старі SDK з XCode 4.

Ви можете побачити «Відсутній SDK» у налаштуваннях збірки. Змініть це на все, що стосується.


Це майже перше, що я роблю щоразу, коли оновлюю xcode. Цього разу це не проблема.
CodeVomit

7

У мене був такий самий випуск: я випадково видалив файл .m, тоді як .h був у проекті. Проблема зникла, коли я відновив файл .m.


6

Переконайтеся, що у вас не вказано конкретний рамковий шлях пошуку. якщо ви перейдете до інформації про ціль і просто видаліть записи шляху пошуку рамки, вона повинна використовувати типові параметри для вказаної версії розгортання.


5

Я просто намагаюся створити category classфайл і отримав цю дивну проблему .. і нарешті ....

Неправильний спосіб створити клас категорії, що викликає проблему:

New File-> Cocoa Touch->Objective-C class , я змінив ім'я файлів у категорію категорії, наприклад, ім'я .. (тобто OriginalClass_CategoryName.h/mдоOriginalClass+CategoryName.h/m , а також змінив вміст у файлі).

Правильний шлях тут:

New File -> Cocoa Touch -> Objective-C category, і він автоматично генерує файли (OriginalClass+CategoryName.h/m ).

О, як я дурний !!


5

Якщо ви використовуєте CoreData, а ви використовуєте XCode для генерування підкласів NSManagedObject для ваших організацій, переконайтеся, що ви генеруєте лише один для кожної сутності.

Моя проблема полягала в тому, що вона генерувала декілька підкласів NSManagedObject для однієї сутності (і розміщувала їх у різних папках).

Я тільки що видалив їх і відновив підкласи NSManagedObject.


5

Щоб додати до списку дивних речей, які вирішили цю проблему ...

У мене було кілька змінних const CGFloat у глобальному файлі заголовка

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

У момент, коли я їх зняв, все було добре :)


1
Моя проблема WEIRD була у файлі .pch або constants.h. Я оголосив константу як NSString * const kInitiaNotification = @ "kInitialNotification"; не згадуючи спочатку "статику"
Мазен Кассер

У мене було питання тільки після того, як я перейшов з NSString static *key = @"someKey"доconst NSString *key = @"someKey"
TonyTony

5

У мене була точно така ж проблема тільки тому, що у мене були дві однакові константи в різних класах. Ви також можете мати цю проблему, якщо ви імпортуєте .m файл не .h файл


Ти врятуєш мій день !!
teck wei

@teckwei можна натиснути стрілку вгору Голосувати: D
Адела Тодерічі


4

У мене була така ж проблема, і я її вирішив. У моєму випадку проблема «архітектури» викликала проблему. У моєму файлі проекту вкладка Налаштування збірки, архітектури були встановлені на armv6. Я змінив його на Стандартний (armv7), очистив і створив. Тоді це спрацювало!


4

У моєму випадку проблема полягала в тому, що різні архітектури були вказані під різними цілями. Я будував свою ціль програми за допомогою armv6, armv7 та cocos2d зі стандартом (amrv7). Перейдіть до налаштувань збірки та переконайтеся, що ваші архітектури відповідають усім цілям.


4

Я вирішив цю проблему занадто дивно!

Перейдіть до Цільової > Фази збірки > Пов’язати бінарне з бібліотеками :

Видаліть усі свої рамки та додайте їх знову!

Сподіваюся, це працює для вас!


досить жахливе рішення
SleepsOnNewspapers

На це не можна відповісти ... не дуже логічно
LKM

Я перевірив повідомлення про помилку і виявив, що це одна з фреймворків, тому я видалив цей фреймворк і додав його знову, не всі рамки, а лише цей.
Oluwatobi Omotayo

4

Для швидкої мови ...

Я отримую цю помилку "ld: файл занадто малий (довжина = 0) ...."

У моєму випадку я просто очищую проект, а потім відновлюю його.

Кроки: -

1) goto Project -> Очистити

2) goto Project -> Побудувати

Сподіваюся, це допомагає ..


Працювали для мене. Сталося, коли я перемикаю пристрій з iPhone 6 на iPhone 4S.
racl101

Працював і для мене. Велике спасибі
Лі

4

Це зробило для мене хитрість:

Йти до

1) Продукти> чисті

2) Windows> Проекти

3) Виберіть проект та натисніть на « Видалити » отримані дані

4) Продукти> Збірка


3

Одна з можливостей: увімкніть "Відключення мертвого коду" в налаштуваннях збірки Xcode 4.

Інша можливість: можливо, ви перейшли на використання LLVM для деякої основи, яка раніше використовувала GCC. Повернення до GCC (або LLVM GCC) може позбутися цих попереджень.


3

Я помилково визначив нову константу з тим самим іменем, що і існуючу константу в іншому файлі, і це спричинило для мене цю помилку за допомогою xCode 4.3.1. xCode не скаржився, але компілятору це не подобається.


3

Мені вдалося виправити цю помилку, відредагувавши "Шляхи пошуку бібліотеки"

Перш за все, це перетворилось через те, що я перемістив кілька папок, і це в результаті дало моїм параметрам збірки два різні шляхи пошуку, оскільки вони автоматично додаються до ваших налаштувань збірки, коли ви зв’язуєте бібліотеку / рамку, але вони не є завжди видаляється.

Отже, якщо ви перемістите пов’язану бібліотеку / фреймворк в інший каталог і повторно зв’яжіть його, вам доведеться вручну редагувати шлях пошуку.

Ви можете уникнути цього, видаливши бібліотеку / рамку перед її переміщенням, але я цього не перевіряв.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.