Podczas próby kompilacji z Xcode otrzymuję następujący błąd:
**Ld /Users/doronkatz/Library/Developer/Xcode/DerivedData/iKosher-bphnihrngmqtkqfgievrrumzmyce/Build/Products/Debug-iphonesimulator/iKosher.app/iKosher normal i386
cd /Users/doronkatz/Sites/xCode/iKosher
setenv MACOSX_DEPLOYMENT_TARGET 10.6
setenv PATH "/Xcode4/Platforms/iPhoneSimulator.platform/Developer/usr/bin:/Xcode4/usr/bin:/usr/bin:/bin:/usr/sbin:/sbin"
/Xcode4/Platforms/iPhoneSimulator.platform/Developer/usr/bin/gcc-4.2 -arch i386 -isysroot /Xcode4/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator4.2.sdk -L/Users/doronkatz/Library/Developer/Xcode/DerivedData/iKosher-bphnihrngmqtkqfgievrrumzmyce/Build/Products/Debug-iphonesimulator -L/Users/doronkatz/Sites/xCode/iKosher -F/Users/doronkatz/Library/Developer/Xcode/DerivedData/iKosher-bphnihrngmqtkqfgievrrumzmyce/Build/Products/Debug-iphonesimulator -filelist /Users/doronkatz/Library/Developer/Xcode/DerivedData/iKosher-bphnihrngmqtkqfgievrrumzmyce/Build/Intermediates/iKosher.build/Debug-iphonesimulator/iKosher.build/Objects-normal/i386/iKosher.LinkFileList -mmacosx-version-min=10.6 -all_load -ObjC -Xlinker -objc_abi_version -Xlinker 2 -lz -framework Security -framework CFNetwork -framework CoreData -framework Foundation -framework UIKit -framework CoreGraphics -framework QuartzCore -o /Users/doronkatz/Library/Developer/Xcode/DerivedData/iKosher-bphnihrngmqtkqfgievrrumzmyce/Build/Products/Debug-iphonesimulator/iKosher.app/iKosher
Undefined symbols for architecture i386:
"_UTTypeCreatePreferredIdentifierForTag", referenced from:
+[ASIHTTPRequest mimeTypeForFileAtPath:] in ASIHTTPRequest.o
"_UTTypeCopyPreferredTagWithClass", referenced from:
+[ASIHTTPRequest mimeTypeForFileAtPath:] in ASIHTTPRequest.o
"_kUTTagClassMIMEType", referenced from:
+[ASIHTTPRequest mimeTypeForFileAtPath:] in ASIHTTPRequest.o
"_kUTTagClassFilenameExtension", referenced from:
+[ASIHTTPRequest mimeTypeForFileAtPath:] in ASIHTTPRequest.o
"_SCNetworkReachabilitySetCallback", referenced from:
-[Reachability startNotifier] in Reachability.o
"_SCNetworkReachabilityScheduleWithRunLoop", referenced from:
-[Reachability startNotifier] in Reachability.o
"_SCNetworkReachabilityUnscheduleFromRunLoop", referenced from:
-[Reachability stopNotifier] in Reachability.o
"_SCNetworkReachabilityCreateWithName", referenced from:
+[Reachability reachabilityWithHostName:] in Reachability.o
"_SCNetworkReachabilityCreateWithAddress", referenced from:
+[Reachability reachabilityWithAddress:] in Reachability.o
"_SCNetworkReachabilityGetFlags", referenced from:
-[Reachability currentReachabilityStatus] in Reachability.o
-[Reachability isReachable] in Reachability.o
-[Reachability isConnectionRequired] in Reachability.o
-[Reachability isConnectionOnDemand] in Reachability.o
-[Reachability isInterventionRequired] in Reachability.o
-[Reachability isReachableViaWWAN] in Reachability.o
-[Reachability isReachableViaWiFi] in Reachability.o
...
ld: symbol(s) not found for architecture i386
collect2: ld returned 1 exit status**
Nie wiem, co to znaczy.
źródło
Rozwiązałem to następującą metodą (dla XCode 4):
1) Wybierz projekt w oknie nawigacji projektu, które pokaże podsumowanie projektu po prawej stronie
2) Wybierz fazy tworzenia 4. zakładki
3) Wybierz opcję Link binary with library
4) Dodaj ramy, dla których otrzymujesz
5) Przenieś framework z folderu głównego do folderu frameworków
6) Zbuduj go ponownie, a błędy znikną.
źródło
Problem polega na tym, że w miejscu docelowym aplikacji brakuje członkostwa docelowego dla dodanego pola.Więc wybierz plik i dodaj znacznik wyboru w polu członkostwa docelowego
Na przykład, jeśli błąd wyświetlany w definicji metody w common.m
źródło
Pomyślałem o dodaniu mojego rozwiązania po spędzeniu kilku godzin na tym samym błędzie :(
Faceci powyżej mieli rację, że pierwszą rzeczą, którą powinieneś sprawdzić, jest to, czy nie dodałeś żadnych frameworków, zobacz kroki podane przez Pruthvid powyżej.
Okazało się, że moim problemem był brak klasy kompilacji po jej usunięciu, a później dodaniu z powrotem.
Sprawdź „Skompiluj źródła”, jak pokazano pod kątem zgłoszonych klas błędów. Dodaj brakujące klasy, które utworzyłeś.
źródło
Upewnij się, że brakujący framework jest rzeczywiście wymieniony w "Cel / Fazy Budowania / Połącz plik binarny z Bibliotekami", jeśli nie tylko go dodaj. Jak wspomniano wcześniej, zwykle oznacza to brakujące ramy.
W moim projekcie były wymienione dwa identyczne frameworki, kiedy usunąłem jeden z nich miałem ten błąd, ponieważ usunął go również z listy "Link Binary With Libraries". Dodałem ponownie i problem zniknął (i nadal mam na liście dwa frameworki)
źródło
Naprawiłem podobny błąd w moim projekcie, zmieniając Ustawienia kompilacji> Architektury dla WSZYSTKICH moich celów.
Problem: kiedy uaktualniłem Xcode 4.4 do Xcode 4.5, mój projekt nadal dobrze się skompilował na symulatorze, ale nie skompilował się na urządzeniach. Na urządzeniach wyrzucił błąd „nie znaleziono symbolu (ów) dla architektury armv7s” wraz z wprowadzającym w błąd „Apple Mach-O Linker Error” i „clang: error: polecenie konsolidatora nie powiodło się z kodem zakończenia 1 (użyj -v, aby zobaczyć wywołanie ). ”
Przyczyna (w moim przypadku): Mój projekt miał wiele celów i chociaż ustawienia kompilacji> Architektury dla głównego celu zostały ustawione tak, aby obejmowały architekturę armv7s, główny cel zależał od innego celu (wymienionego w obszarze Fazy budowy> Zależności) i Nie myślałem o zresetowaniu ustawień kompilacji> Architektury dla tego innego celu i musiałem to zmienić, aby uwzględnić armv7. Przypuszczam, że symulator i urządzenie działają na różnych architekturach i dlatego symulator był w porządku, a urządzenie nie.
źródło
Czy Twój projekt zależy od innego projektu i czy jest to cel w tym projekcie, który jest bezpośrednią zależnością od głównego celu? Jeśli tak jest, a zależność nie jest skonfigurowana, zależny cel może nie zostać zbudowany dla wszystkich konfiguracji (tj. Symulatora)
Tylko szalone przypuszczenie.
źródło
Inną sytuacją, która może powodować ten problem, jest to, że kod wywołuje C ++ lub jest wywoływany przez kod C ++. Miałem problem z funkcją narzędzia mojego własnego pliku .c, która wyświetlała się jako „nie znaleziono symbolu” po wywołaniu z Obj-C. Poprawka polegała na zmianie typu pliku: w Xcode 4 użyj rozszerzonego panelu informacyjnego, aby ustawić typ pliku na „Objective-C ++ Source”; w Xcode 3 użyj opcji „Get Info”, aby zmienić typ pliku na „source.cpp.objcpp”.
źródło
W moim przypadku żadne z opublikowanych rozwiązań nie zadziałało. Musiałem usunąć projekt i dokonać nowego pobrania z serwera SVN . Na szczęście projekt był hostowany w systemie kontroli wersji. Nie wiem, co bym zrobił inaczej.
źródło
W projekcie C ++ używającym zdefiniowanej klasy z szablonem , otrzymując ten sam błąd, wybrałem plik .cpp ze zdefiniowaną klasą z szablonem w Nawigatorze projektu, a następnie Usuń> Usuń odniesienie. Również powiązany plik .h, mimo że nadal występuje w projekcie, musi zawierać instrukcję #include do pliku .cpp w następujący sposób:
Jeśli chcesz zobaczyć, prosty przykład projektu jest na github :
To trochę sztuczka pośrednia i nie przypominam sobie oryginalnego źródła tego obejścia.
źródło
Jeśli ten błąd pojawia się nagle, oznacza to, że w projekcie brakuje niektórych frameworków. Biblioteki i projekty zależne mogą wymagać ram, więc jeśli niedawno je dodałeś, może to spowodować ten błąd.
Aby dodać struktury, kliknij prawym przyciskiem myszy nazwę projektu w widoku projektu, wybierz Dodaj, a następnie wybierz z listy Istniejące struktury. Następnie znajdź ramy z symbolami, których brakuje.
Inną rzeczą jest to, że jeśli dodałeś jakieś klasy do skompilowanych zasobów i usunąłeś te klasy z projektu, pojawi się błąd. Najlepszą rzeczą do zrobienia jest usunięcie klas z zasobów kompilacji (Ustawienia kompilacji -> źródła kompilacji), które zostały usunięte z projektu.
W moim przypadku dodałem klasy AdMob do projektu i skompilowałem projekt. W późniejszym przypadku nie chcę włączać AdMob do mojego projektu, więc usunąłem odniesienia do klas AdMob z mojego projektu. Kiedy wystąpił ten błąd, usunąłem klasę .m mojego admob z zasobów kompilacji, rozwiązałem ten problem.
źródło
Zdarzyło mi się to podczas próby skopiowania biblioteki demonstracyjnej PSPDFKIT do mojego projektu. Postępowałem zgodnie ze wszystkimi instrukcjami na stronie + wszystkimi sugestiami na tej stronie .. z jakiegoś powodu dalej podawał powyższy błąd, problem polegał na tym, że jeśli grepowałem wiadomość w metodzie błędu .. pojawiała się tylko w pliku binarnym ( oczywiście nie mam dostępu do kodu źródłowego b / c muszę za to zapłacić).
Zauważyłem to jednak na stronie instrukcji:
Więc poszedłem do wnętrzności tego pliku konfiguracyjnego i znalazłem to:
Następnie przeszedłem do przykładowego projektu dostarczonego przez autora wspomnianej biblioteki .. i zauważyłem, że poprzednie flagi zostały dosłownie skopiowane do innych flag konsolidatora w moich ustawieniach kompilacji .. jednak w moim projekcie .. nie były! .. Więc po prostu skopiowałem i wkleiłem je do ustawień kompilacji mojego projektu, inne flagi konsolidatora i wszystko działało!
na koniec: jeśli opierasz się na jakimś pliku .xcconfig w swojej konfiguracji, dwukrotnie sprawdź przykładowe źródło kodu lub coś w tym rodzaju i upewnij się, że zostało faktycznie zastosowane .. nie zostało zastosowane poprawnie w moim przypadku
źródło
Innym powodem, dla którego może się to zdarzyć, jest aktualizacja SDK.
Jeśli po prostu usuniesz grupę, a następnie przeciągniesz i upuścisz nowy folder do projektu, „Ścieżka wyszukiwania biblioteki” będzie zawierała oba pakiety SDK. Aby rozwiązać, po prostu usuń starą ścieżkę SDK.
źródło
Użyłem CLGeocodera bez dodawania struktury Core.Location. Zasadniczo ten błąd może oznaczać wiele rzeczy. Mam nadzieję, że to pomoże komuś innemu.
źródło
Wcześniej zaskoczyło mnie to tylko po to, aby zdać sobie sprawę, że dodałem @interface tylko do danych i zapomniałem dodać pusty blok @implementation.
źródło
Pojawił się ten problem w Xcode 11, poprawka polegała na zmianie minimalnego celu wdrożenia z 10.0 na 11.0, mam nadzieję, że to komuś pomoże :)
źródło