Apple Mach-O Linker Błąd podczas kompilacji dla urządzenia

238

Właśnie uaktualniłem do xcode 4.0 i nie mogę już wdrożyć na iPhonie, pojawia się błąd Apple Mach-O Linker, ale nadal działa dla symulatora.

    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
źródło
38
Co za cholera?! Tyle różnych problemów dla tego samego komunikatu o błędzie. Dobra robota Apple!
Iulian Onofrei
18
„BŁĄD: wystąpił błąd” byłoby bardziej pomocne :))
Aviram Netanel
Spójrz na ostrzeżenia wyrzucone przez Linkera przed błędem; może to prowadzić do lepszego / bardziej konkretnego rozwiązania.
Pro Q

Odpowiedzi:

216

Oto trwałe rozwiązanie. Generalnie nadpisywanie projektu może powodować takie problemy. Wypróbuj tę metodę.

-UPDATE - Błąd Clang - Błąd Mach-O Linkera

W niektórych przypadkach okno dziennika błędów wyświetla błąd .xctest, aby go naprawić

-> Wybierz swój projekt

-> Oprócz tego (tuż przed zakładką Ogólne) wybierz plik testowy projektu z menu rozwijanego

-> Istnieje jedna opcja (jak ProjNameTests)

-> W aplikacji hosta wybierz projekt z menu rozwijanego tylko wtedy, gdy pokazuje niestandardowy

GOTOWE!

wprowadź opis zdjęcia tutaj

Stara metoda została usunięta

Gajendra K Chauhan
źródło
4
Jeśli
usunę
62
Myślę, że nie rozumiem. Co powinienem zrobić…?
fabian
1
@fabian Po prostu pomiń i wypróbuj alternatywne rozwiązanie :-)
Gajendra K Chauhan
4
Uratował mi dzień. Siedząc przed moim szefem, muszę pokazać mu aplikację, nad którą pracuję, i dostałem ten błąd linkera. Nie było mnie, jeśli tu nie wylądowałem: D
Saraz
2
gdzie jest aplikacja hosta w ostatnim kroku?
Kartiikeya,
195

Miałem ten sam problem i problem polegał na tym, że przypadkowo zaimportowałem plik .m zamiast .h do pliku implementacyjnego - mam nadzieję, że to pomoże

Daniel
źródło
1
Nie można znaleźć błędu! Po prostu wypróbuj każde rozwiązanie
AsifHabib,
To nie jest prawda, próbowałem tego samego w nowym projekcie i wciąż pojawia się ten sam błąd.
Hemang,
Przejdź do sekcji Ustawienia projektu i Fazy kompilacji, upewnij się, że nie masz pliku .m w sekcji „Kopiuj zasoby pakietu” zamiast „Kompiluj źródła”. to zadziałało dla mnie
LuAndre
Nie można znaleźć rozwiązania. Nie wiem, co zamierzam zrobić ...
Markus,
Uratowałeś mi życie. Dziękuję bardzo!
Izaak
73

Właśnie natrafiłem na ten sam problem.

Rozwiązanie (dla mnie) = sprawdź swoje frameworki.

W moim przypadku dodałem klasy związane z CoreData bez „CoreData.framework”. Dodanie go rozwiązało skargę MACH_O.

Dante Cesa
źródło
6
Dzieje się tak również po ponownym połączeniu biblioteki, która nie jest obecna w najnowszej wersji SDK. Załóżmy, że masz link do libz.1.2.3, a sdk zawiera 1.2.5. Sprawdź swoje frameworki to naprawdę dobra sugestia! Dziękuję Dante!
SlowTree,
Dzięki SlowTree, zapisanie sugestii rozwiązało moje doświadczenia z tą awarią linkera. libz.1.2.3 do libz.1.2.5;
Tom Pace,
2
Cocoapods połączył libPods.adla mnie dwa pliki (stąd duplikaty symboli). Dzięki, Dante!
Nick Merrill,
Tak. Usunięto pliki .a i dodano ponownie z linkera. Udało się!
Balasubramanian
61

otwórz plik .xcworkspace nie .xcodeproj. Powtarzam otwarty plik .xcworkspace. Wszystkie twoje błędy znikną.

mahi
źródło
1
Wow, to musi być jedna z najbardziej szalonych wiadomości debugowania. Dosłownie nigdy bym nie zgadł, że to był powód oparty na przesłanej wiadomości.
Joseph Casey,
1
Zrobił to dla mnie, ponieważ istniała zewnętrzna biblioteka, która nie została uwzględniona w .xcodeproj. miał do czynienia z cocoapods
Sjoerd de Wit
To zadziałało dla mnie. Jak powiedział @SjoerddeWit - włączenie cocoapods wymaga otwarcia .xcworkspace zamiast .xcodeproj.
Cody Richmond
Uratowałem mój dzień! +1
Bruno Monteiro,
Wyeksportowałem projekt jedności do xcode i nie ma pliku .xcworkspace
Ayush Malviya
36

Odp: Problem opisany w tytule:

Na wypadek, gdyby ktokolwiek przegapił oczywiste ...

Ten błąd napotkałem po zainstalowaniu nowej wersji Xcode4 i przeciągnięciu istniejących plików do nowego projektu. Nie zauważyłem, że pole wyboru „dodaj do celów” pozostało niezaznaczone w oknie dialogowym „Wybierz opcje dodawania plików:”. Poprawienie mojego pominięcia w Celach> Fazy kompilacji> Kompiluj źródła rozwiązało problem.

Cate
źródło
Ta sztuczka działała dla mnie. dzięki. Usunąłem wszystkie katalogi kompilacji i odbudowałem projekt.
Vivek Gyaneshwar,
34

Menu> Produkt> Czysty, dzięki temu działał. Nie jestem pewien co do wszystkich innych. Dodałem zdjęcie do pokazania.

wprowadź opis zdjęcia tutaj

dnaatwork.com
źródło
1
Niesamowite. Zdecydowanie najłatwiejsze rozwiązanie, jakie udało mi się znaleźć.
Vincent van Leeuwen,
29

Dziwny błąd. Dla mnie właśnie wyczyściłem i ponownie uruchomiłem Xcode, a problem zniknął.

p.pad
źródło
26

Poprawka: Ustawienia kompilacji> Włącz kod bitowy> Nie wprowadź opis zdjęcia tutaj

Sebastián Lara
źródło
Holy Shot ..! To zadziałało dla mnie :)
Droid Genie
24

Żadna z tych odpowiedzi mi nie pomogła. Następnie próbowałem ponownie zainstalować Cocoapods:

pod deintegrate

pod install

Problem rozwiązany!

Johannes
źródło
Nie jestem pewien, gdzie znajduje się rozłączenie z pods i xcode, ale często jest to trudność, aby upewnić się, że pliki pods znajdują się w folderze pochodnych danych. Wydaje się, że to rozwiązuje ten problem. Chciałbym móc zacząć właśnie tę odpowiedź ..
Jacksonkr
20

Problem polegał na tym, że w XCode 4 zależności nie zakładają ustawień architektury głównego projektu, tak jak poprzednio w XCode 3. Musiałem przejść przez wszystkie moje zależności, ustawiając je dla poprawnej architektury.

CodeVomit
źródło
2
Dziękuję Ci! Zostałem wprowadzony w błąd przez fakt, że komunikat o błędzie z linkera narzeka na „Nie znaleziono pliku”, a nie „Plik znaleziony, ale nie mogę go użyć ...” i wędrowałem po ustawieniach xcode w poszukiwaniu biblioteki ścieżki Ale to zadziałało dla mnie. A jeśli masz problem z tym problemem, ten drugi post jest również powiązany: stackoverflow.com/questions/2999844/three20-and-ios-4 . Ponadto ten miły blog podsumowujący: amirnaor.com/?p=112
Rob
13

Miałem to samo i udało mi się go rozwiązać.

W preferencjach xcode karta lokalizacji zmienia wartość w obszarze kompilacji na „ Place build products in locations specified by targets".

Wolfert
źródło
Dzięki Wolfert, próbowałem tego, ale nadal mam 1250 ostrzeżeń Apple Mach-O Linker i brak postępu. Czy zrobiłeś coś jeszcze, aby to naprawić? Pozdrawiam
Dzięki Wolfert! oszczędziłeś mi dużo czasu.
Sunil Targe
6
Opcja nie jest dostępna w XCode 5.1
Hemang
13

Zmagałem się z tym przez chwilę, aw moim przypadku skończyło się to ustawieniem kompilacji pod Ścieżkami wyszukiwania o nazwie FRAMEWORK_SEARCH_PATHS. Pomogło mi to, że wybrałem przycisk „Poziomy”, który wydawał się porównywać mój projekt, cel i ustawienia „Rozwiązane”. Zauważyłem, że moje ustawienie docelowe w jakiś sposób przesłoniło domyślną wartość „$ (dziedziczony)”, a nadpisaną wartością było to, co XCode „rozwiązało” to ustawienie. Kiedy usunąłem zastąpienie, które w tym przypadku określiło wersję 3.2 sdk, błędy linkera zniknęły - podobnie jak ostatnio pojawiły się ostrzeżenia o klasach, w których wywoływałem metody post-4.0.

O tych ostrzeżeniach - nigdy ich nie widziałem, dopóki nie dodałem frameworku MessageUI dla ostatniej zmiany. Podejrzewam, ale nie wiem na pewno, że kiedy dodałem tę platformę, XCode próbował zrobić coś sprytnego, dodając tę ​​zmianę do mojego celu. W żadnym momencie nie zrobiłem tego wyraźnie. Ostrzeżenia dotyczyły na przykład metody URLByAppendingPathComponent NSURL, która pojawiła się dopiero w sdk 4.0. Przed dodaniem frameworku MessageUI nigdy nie otrzymałem tego ostrzeżenia. A ponieważ usunąłem zastąpienie, już ich nie otrzymuję.

tigerswim19
źródło
11

Miałem ten problem i import QuartzCorego naprawił.

jmosesman
źródło
8

Zmiana „Kompiluj tylko aktywne architektury” na Tak w CordovaLib.xcodeproj -> Ustawienia kompilacji załatwiło sprawę. wcześniej aplikacja działała na symulatorze, ale nie na urządzeniu.

Nishanth Nair
źródło
7

Może być konieczne zaktualizowanie ustawień kompilacji.

Sprawdź docelową wersję systemu iOS i architekturę procesora, ponieważ możesz nie mieć starych zestawów SDK z XCode 4.

W ustawieniach kompilacji może zostać wyświetlony komunikat „Brakujący zestaw SDK”. Zmień to na cokolwiek dotyczy.

Macmade
źródło
To właściwie pierwsza rzecz, którą robię, kiedy aktualizuję xcode. Tym razem to nie problem.
CodeVomit
7

Miałem ten sam problem: przypadkowo usunąłem plik .m, podczas gdy .h był w projekcie. Problem zniknął po przywróceniu pliku .m.

Misza Karpenko
źródło
6

Sprawdź, aby upewnić się, że nie określono określonej ścieżki wyszukiwania w strukturze. jeśli przejdziesz do informacji o obiekcie docelowym i po prostu usuniesz wpisy ścieżki wyszukiwania struktury, powinien użyć ustawień domyślnych dla określonej wersji wdrożenia.

Grady Player
źródło
5

Po prostu próbuję utworzyć category classplik i mam ten dziwny problem ... i wreszcie ...

Niepoprawny sposób utworzenia klasy kategorii, który powoduje problem:

New File-> Cocoa Touch-> Objective-C class, następnie zmodyfikowałem nazwę plików do Klasy Kategorii jak nazwa .. (tj. OriginalClass_CategoryName.h/mdo OriginalClass+CategoryName.h/m, a także zmodyfikowałem zawartość pliku).

Właśnie tutaj:

New File-> Cocoa Touch-> Objective-C category, i automatycznie wygeneruje pliki ( OriginalClass+CategoryName.h/m).

Och, jaki jestem głupi!

Kjuly
źródło
5

Jeśli używasz CoreData i używasz XCode do generowania podklas NSManagedObject dla swoich encji, upewnij się, że generujesz tylko jedną dla każdej encji.

Mój problem polegał na tym, że wygenerował wiele podklas NSManagedObject dla tego samego obiektu (i umieścił je w różnych folderach).

Właśnie usunąłem je wszystkie i ponownie wygenerowałem podklasy NSManagedObject.

Flaviu
źródło
5

Aby dodać do listy dziwnych rzeczy, które rozwiązały ten problem ...

Miałem pewne stałe zmienne CGFloat w takim globalnym pliku nagłówkowym

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

W momencie, gdy je usunąłem, wszystko było w porządku :)

Sherlock
źródło
1
Mój problem WEIRD dotyczył pliku .pch lub const.h. Zadeklarowałem stałą jako NSString * const kInitiaNotification = @ "kInitialNotification"; początkowo bez wzmianki o „statycznym”
Mazen Kasser
Miałem problem tylko po zmianie od NSString static *key = @"someKey"doconst NSString *key = @"someKey"
TonyTony
5

Miałem dokładnie ten sam problem tylko dlatego, że miałem dwie takie same stałe w różnych klasach. Ten problem może również wystąpić, jeśli importujesz plik .m, a nie plik .h

Adela Toderici
źródło
Ratujesz mój dzień !!
teck wei
@teckwei można nacisnąć strzałkę w górę: D
Adela Toderici
4

Miałem ten sam problem i go rozwiązałem. W moim przypadku problem spowodował ustawienie „architektury”. W moim pliku projektu, na karcie Ustawienia kompilacji, Architektury zostały ustawione na armv6. Zmieniłem go na Standardowy (armv7), czyściłem i budowałem. Potem zadziałało!

Kim Jin
źródło
4

W moim przypadku problemem było określenie różnych architektur w ramach różnych celów. Budowałem swój cel aplikacji za pomocą armv6, armv7 i cocos2d ze standardem (amrv7). Przejdź do ustawień kompilacji i upewnij się, że Twoje architektury zgadzają się na wszystkie cele.

ChrisP
źródło
4

Zbyt dziwnie rozwiązałem ten problem!

Wybierz Cel > Fazy kompilacji > Połącz pliki binarne z bibliotekami :

Usuń wszystkie swoje frameworki i dodaj je ponownie!

Mam nadzieję, że to działa dla Ciebie!

Rudi
źródło
całkiem okropne rozwiązanie
SleepsOnNewspapers
To nie może być odpowiedź ... niezbyt logiczna
LKM
Sprawdziłem komunikat o błędzie i stwierdziłem, że była to jedna z ram, więc usunąłem tę ramę i dodałem ją ponownie, nie wszystkie, ale tylko tę.
Oluwatobi Omotayo
4

Dla języka Swift ...

Otrzymuję ten błąd „ld: plik jest zbyt mały (długość = 0) ....”

W moim przypadku wystarczy wyczyścić projekt, a następnie go odbudować ..

Kroki:-

1) goto Project -> Clean

2) goto Project -> Build

Mam nadzieję że to pomoże..

Niks
źródło
Pracował dla mnie. Zdarzyło się, gdy przełączam urządzenie z iPhone'a 6 na iPhone'a 4S.
racl101
Pracowałem też dla mnie. Wielkie dzięki
Lee
4

To zrobiło dla mnie lewę:

Iść do

1) Produkty> czyste

2) Windows> Projekty

3) Wybierz projekt i kliknij Dane pochodneUsuń

4) Produkty> Kompilacja

użytkownik4886069
źródło
3

Jedna możliwość: włącz „Usuwanie martwego kodu” w ustawieniach kompilacji Xcode 4.

Inna możliwość: być może przełączyłeś się na używanie LLVM dla niektórych frameworków, które wcześniej używały GCC. Powrót do GCC (lub LLVM GCC) może pozbyć się tych ostrzeżeń.

Enchilada
źródło
3

Przez pomyłkę zdefiniowałem nową stałą o takiej samej nazwie jak istniejąca stała w innym pliku i spowodowało to ten błąd dla mnie przy użyciu xCode 4.3.1. xCode nie narzekał, ale kompilatorowi się to nie podoba.

moliveira
źródło
3

Naprawiłem ten błąd, edytując „Ścieżki wyszukiwania w bibliotece”

Pojawiło się przede wszystkim dlatego, że przeniosłem kilka folderów, co ostatecznie dało moim ustawieniom kompilacji dwie różne ścieżki wyszukiwania, ponieważ są one automatycznie dodawane do ustawień kompilacji po połączeniu biblioteki / frameworka, ale nie są zawsze usuwane.

Jeśli więc przeniesiesz połączoną bibliotekę / strukturę do innego katalogu i ponownie ją połączysz, będziesz musiał ręcznie edytować ścieżkę wyszukiwania.

Być może uda ci się tego uniknąć poprzez usunięcie biblioteki / frameworka przed przeniesieniem go, ale tego nie przetestowałem.

Rembrandt Q. Einstein
źródło