Apple Mach-O Linker Ошибка при компиляции для устройства

238

Я только что обновился до xcode 4.0 и больше не могу развертываться на iPhone, я получаю ошибку Apple Mach-O Linker, хотя она все еще работает для симулятора.

    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
источник
38
Какого черта?! Так много разных проблем для одного и того же сообщения об ошибке. Хорошая работа, Apple!
Юлиан Онофрей
18
«ОШИБКА: произошла ошибка» было бы более полезным :))
Aviram Netanel
Посмотрите на предупреждения, которые компоновщик выкладывает перед ошибкой; это может привести к лучшему / более конкретному решению.
Про Q

Ответы:

216

Вот постоянное решение. В общем случае перезапись проекта может стать причиной этой проблемы. Попробуйте этот метод.

-UPDATE - Ошибка лягушки - Ошибка компоновщика Mach-O

В некоторых случаях в окне журнала ошибок отображается ошибка .xctest, чтобы ее исправить.

-> Выберите свой проект

-> Рядом с этим (непосредственно перед вкладкой General) выберите свой файл projectTest из выпадающего списка

-> Есть один вариант (например, ProjNameTests)

-> В Host Application выберите свой проект из выпадающего списка, только если он показывает пользовательский

СДЕЛАНО!

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

Старый метод удален

Гаджендра К Чаухан
источник
4
Если я удалю путь поиска в Framework, то получаю, что не могу найти заголовочный файл
Danpe
62
Я думаю, что я не понимаю. Что я должен делать…?
Фабиан
1
@fabian Просто пропустите и попробуйте альтернативное решение :-)
Gajendra K Chauhan
4
Спас мой день человек. Сидя перед моим боссом, должен показать ему приложение, над которым я работаю, и я получил эту ошибку компоновщика. Я ушел, если бы не приземлился здесь: D
Сараз
2
где находится хост-приложение на последнем этапе?
Kartiikeya
195

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

Daniel
источник
1
Невозможно найти ошибку! Просто попробуйте каждое решение
AsifHabib
Это не правда, я пробовал то же самое в новом проекте и все еще получаю ту же ошибку.
Hemang
Перейдите в раздел «Настройки проекта» и «Этапы сборки», убедитесь, что у вас нет файла .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. был связан с cocoapods
de Wit
Это сработало для меня. Как сказал @SjoerddeWit, для включения cocoapods требуется открытие .xcworkspace, а не .xcodeproj.
Коди Ричмонд
Спас мой день! +1
Бруно Монтейру
Я экспортировал проект Unity в XCode, и там нет файла .xcworkspace
Аюш Мальвия,
36

Re: проблема, как указано в заголовке:

На всякий случай, если кто-то еще пропустил очевидное ...

Я столкнулся с этой ошибкой после установки новой версии Xcode4 и перетаскивания существующих файлов в новый проект. Мне не удалось обнаружить, что флажок «Добавить к целям» не был отмечен в диалоговом окне «Выбор параметров для добавления файлов:». Исправление моего пропуска в Targets> Build Phases> Compile Sources решило проблему.

Cate
источник
Этот трюк сработал для меня. Спасибо. Я удалил все каталоги компиляции и перестроил проект.
Вивек Гьянешвар
34

Menu> Product> Clean - вот что заставило его работать. Я не уверен во всех остальных. Я добавил фото, чтобы показать.

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

dnaatwork.com
источник
1
Потрясающие. Безусловно самое простое решение, которое я мог найти.
Винсент ван Леувен,
29

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

p.pad
источник
26

Исправлено: Настройки сборки> Включить битовый код> Нет введите описание изображения здесь

Себастьян Лара
источник
Святой выстрел ..! Это сработало для меня :)
Droid Genie
24

Ни один из этих ответов не помог мне. Затем я попытался переустановить Cocoapods:

pod deintegrate

pod install

Задача решена!

Johannes
источник
Я не уверен, где разъединение с pods & xcode, но часто бывает трудно сделать так, чтобы файлы pods попадали в папку производные данные. Это, кажется, решить эту проблему. Я хотел бы начать только этот ответ ..
Jacksonkr
20

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

CodeVomit
источник
2
Спасибо! Я был введен в заблуждение тем, что сообщение об ошибке от компоновщика жалуется на «Файл не найден», а не «Файл найден, но я не могу его использовать ...», и бродил по настройкам xcode в поисках библиотеки. пути. Но это сработало для меня. И если у вас возникла эта проблема, этот другой пост также связан: stackoverflow.com/questions/2999844/three20-and-ios-4 . Кроме того, это хороший сводный блог: amirnaor.com/?p=112
Роб
13

У меня было то же самое и удалось решить.

В настройках xcode вкладка местоположения меняет значение под местоположением сборки на " Place build products in locations specified by targets".

Wolfert
источник
Спасибо Wolfert, попробовал это, но все еще имею 1250 Предупреждений компоновщика Apple Mach-O и никакого прогресса. Вы сделали что-нибудь еще, чтобы это исправить? Приветствия
Спасибо, Вулферт! Вы сэкономили мне много времени.
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 я никогда не получал это предупреждение. И так как я удалил переопределение, я больше не получаю их.

tigerswim19
источник
11

У меня была эта проблема, и импорт QuartzCoreисправил ее.

jmosesman
источник
8

Изменение «Только для активных архитектур» на «Да» в CordovaLib.xcodeproj -> Настройки сборки помогло мне. ранее приложение работало на симуляторе, но не на устройстве.

Нишант Наир
источник
7

Возможно, вам придется обновить настройки сборки.

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

Вы можете увидеть «Missing SDK» в настройках сборки. Измените это на то, что применимо.

Macmade
источник
Это первое, что я делаю, когда обновляю xcode. На этот раз это не проблема.
CodeVomit
7

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

Миша Карпенко
источник
6

Убедитесь, что у вас не указан конкретный путь поиска фреймворка. если вы переходите к информации о цели и просто удаляете записи пути поиска фреймворка, следует использовать значения по умолчанию для указанной версии развертывания.

Grady Player
источник
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 ).

О, как я глупа!

Kjuly
источник
5

Если вы используете CoreData и используете XCode для генерации подклассов NSManagedObject для ваших сущностей, убедитесь, что вы генерируете только один для каждой сущности.

Моя проблема заключалась в том, что он генерировал несколько подклассов NSManagedObject для одной и той же сущности (и помещал их в разные папки).

Я просто удалил их все и заново создал подклассы NSManagedObject.

Flaviu
источник
5

Чтобы добавить в список странных вещей, которые исправили эту проблему ...

У меня были некоторые константные переменные CGFloat в глобальном заголовочном файле, например,

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

В тот момент, когда я удалил их, все было хорошо :)

шерлок
источник
1
Моя странная проблема была в файле .pch или constants.h. Я объявил константу как NSString * const kInitiaNotification = @ "kInitialNotification"; не говоря уже о «статическом» вначале
Mazen Kasser
У меня был вопрос только после того, как я перешел с NSString static *key = @"someKey"кconst NSString *key = @"someKey"
TonyTony
5

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

Адела Тодеричи
источник
Вы спасли мой день!
Век
@teckwei вы можете нажать стрелку вверх Голосовать: D
Адела Тодеричи
4

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

Ким Джин
источник
4

В моем случае проблема заключалась в том, что разные архитектуры указывались под разными целями. Я строил свою цель приложения с armv6, armv7 и cocos2d с помощью Standard (amrv7). Зайдите в настройки сборки и убедитесь, что ваша архитектура соответствует всем целям.

ChrisP
источник
4

Я решил эту проблему слишком странно!

Перейдите в Target > Фазы сборки > Связать двоичные файлы с библиотеками. :

Удалите все свои рамки и добавьте их снова!

Надеюсь, это работает для вас!

Rudi
источник
довольно ужасное решение
SleepsOnNewspapers
Это не может быть ответа ... не очень логично
LKM
Я проверил сообщение об ошибке и обнаружил, что это одна из фреймворков, поэтому я удалил эту фреймворк и добавил его снова, не все фреймворки, а только эту.
Олуватоби Омотайо
4

Для языка Swift ...

Я получаю эту ошибку "ld: file too small (length = 0) ...."

В моем случае я просто очищаю проект, а затем перестраиваю его ..

Шаги: -

1) Перейти к проекту -> Чисто

2) Перейти к проекту -> Построить

Надеюсь это поможет..

Niks
источник
Работал на меня. Произошло, когда я переключаю устройство с iPhone 6 на iPhone 4S.
racl101
У меня тоже сработало. Большое спасибо
Ли
4

Это помогло мне:

Перейти к

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

2) Windows> Проекты

3) Выберите ваш проект и нажмите « Удалить » производные данные

4) Продукты> Сборка

user4886069
источник
3

Одна из возможностей: включить «Удаление мертвого кода» в настройках сборки Xcode 4.

Другая возможность: возможно, вы переключились на использование LLVM для некоторой среды, которая ранее использовала GCC. Возвращение к GCC (или LLVM GCC) может избавить от этих предупреждений.

Enchilada
источник
3

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

moliveira
источник
3

Мне удалось исправить эту ошибку, отредактировав «Пути поиска в библиотеке»

Во-первых, он возник, потому что я переместил пару папок, и в результате у моих настроек сборки были два разных пути поиска, потому что они автоматически добавляются в ваши настройки сборки, когда вы связываете библиотеку / инфраструктуру, но это не так. всегда удаляется

Поэтому, если вы переместите связанную библиотеку / каркас в другой каталог и заново создадите ссылку, вам придется вручную редактировать путь поиска.

Возможно, вы сможете избежать этого, удалив библиотеку / фреймворк перед перемещением, но я этого не проверял.

Рембрандт В. Эйнштейн
источник