Mam teraz to samo pytanie z powyższym tytułem, ale nie znalazłem jeszcze właściwej odpowiedzi. Dostałem błąd:
/Users/nle/Library/Developer/Xcode/DerivedData/TestMoboSDK-Client-cgodalyxmwqzynaxfbbewrooymnq/Build/Intermediates/TestMoboSDK-Client.build/Debug-iphonesimulator/TestMoboSDK-Client.build/Objects-normal/x86_64/MoboSDK.o
/Users/nle/Library/Developer/Xcode/DerivedData/TestMoboSDK-Client-cgodalyxmwqzynaxfbbewrooymnq/Build/Products/Debug-iphonesimulator/libMoboSDK.a(MoboSDK.o)
duplicate symbol _OBJC_METACLASS_$_MoboSDK in:
/Users/nle/Library/Developer/Xcode/DerivedData/TestMoboSDK-Client-cgodalyxmwqzynaxfbbewrooymnq/Build/Intermediates/TestMoboSDK-Client.build/Debug-iphonesimulator/TestMoboSDK-Client.build/Objects-normal/x86_64/MoboSDK.o
/Users/nle/Library/Developer/Xcode/DerivedData/TestMoboSDK-Client-cgodalyxmwqzynaxfbbewrooymnq/Build/Products/Debug-iphonesimulator/libMoboSDK.a(MoboSDK.o)
ld: 75 duplicate symbols for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
Każda pomoc jest mile widziana.
W końcu znajduję przyczynę tego błędu, ponieważ dodałem -ObjC
do Other Linker Flags
. Po usunięciu tej wartości mogę pomyślnie zbudować projekt, ale nie wiem dlaczego. Czy ktoś może to wyjaśnić?
ios
objective-c
xcode5
zawietrzny
źródło
źródło
#include
„lub#import
” coś (prawdopodobnie MoboSDK, cokolwiek to jest) więcej niż jeden raz.GoogleConversionTrackingSDK-iOS-3.0
do mojego projektu. Wcześniej działał dobrze. Próbowałem go również usunąć, ale błąd nadal występuje.Odpowiedzi:
Oznacza, że dwukrotnie załadowałeś te same funkcje. Ponieważ problem zniknie po usunięciu
-ObjC
zOther Linker Flags,
tego oznacza, że ta opcja powoduje, że funkcja ładuje się dwukrotnie:od pytań technicznych
https://developer.apple.com/library/content/qa/qa1490/_index.html
źródło
-ObjC
flagi. Muszę więc zachować tę flagę w ustawieniach projektu. Czy mógłbyś więc zaproponować inne rozwiązanie?Dla mnie zmiana „No Common Blocks” z Yes na No (w Targets-> Build Settings-> Apple LLVM - Code Generation) naprawiła problem.
źródło
NO
? Jaki jest tego powód?Głupi, ale upewnij się, że gdzieś przypadkowo nie
#import
edytowałeś.m
plikuźródło
W moim przypadku właśnie utworzyłem plik nagłówka, aby zdefiniować ciągi takie jak to:
Rozwiązałem ten scenariusz, używając
static
:źródło
extern
zamiaststatic
:extern NSString * const kNotificationName;
. Co jest dziwne, ponieważ zwykle nieAppStrings.h
są stałe, jednak spowoduje havok, jeśli chcesz globalną zmienną zmienną, ponieważ każdy plik źródłowy zawierający plik nagłówkowy będzie miał własną kopię zmiennej. To złe rozwiązanie.Znalazłem zaakceptowaną odpowiedź dotyczącą problemu, ale nie pomogłem jej rozwiązać, mam nadzieję, że ta odpowiedź pomoże rozwiązać ten bardzo frustrujący problem.
„Oznacza, że załadowałeś te same funkcje dwa razy. Ponieważ problem znika po usunięciu opcji -ObjC z innych flag linkera, oznacza to, że wynik tej opcji, który działa dwukrotnie:”
W kategoriach laika oznacza to, że w naszym projekcie mamy dwa pliki o dokładnie takiej samej nazwie. Może łączysz jeden projekt w drugi? Spójrz na błędy powyżej błędu „duplikatów symboli”, aby zobaczyć, który folder jest duplikowany, w moim przypadku był to BLoginViewController.
Na przykład na poniższym obrazku widać, że mam dwa BImageViewControllers, dla mnie to było przyczyną problemu.
Jak tylko go usunąłem, problem zniknął :)
źródło
Mam ten sam problem. W Xcode 7.2 w ścieżce Cel projektu> Ustawienia kompilacji> Brak wspólnych bloków, zmieniam na NIE.
źródło
Zdarza się również, gdy deklarujesz stałe zmiennych o tej samej nazwie w innej klasie:
w pliku Wiadomość.m
w pliku Chat.m
źródło
Stało się tak, gdy zaakceptowałem wyskakujące okienko „zalecane ustawienia” w projekcie, który opracowałem dwa lata temu w Objective-C.
Problem polegał na tym, że po zaakceptowaniu aktualizacji „zalecanych ustawień” Xcode automatycznie zmienił lub dodał niektóre ustawienia kompilacji, w tym
GCC_NO_COMMON_BLOCKS = YES;
.To spowodowało błąd kompilacji z
duplicate symbol
błędem w moim zaktualizowanym projekcie. Więc zmieniłemNo Common Block
naNO
w moich ustawieniach kompilacji i błąd zniknął.źródło
Najszybszym sposobem na znalezienie duplikatu jest:
źródło
Poniższe kroki rozwiązały problem dla mnie.
źródło
Usuń -ObjC z innych flag Linkera lub sprawdź, czy przypadkowo zaimportowałeś dowolny plik .m zamiast .h.
źródło
.m"
zauważyłem, że zaimportowałem plik .m zamiast .h, a po naprawieniu to po prostu działało!Talk is cheap, show me the code!
Twoje zdrowie!Moja sytuacja z niektórymi starszymi projektami otwartymi w Xcode 7.3 była:
następnie lista dwóch niepowiązanych plików. o, następnie powtórzono to kilka razy, a następnie:
Rozwiązałem dla mnie zmianę deklaracji enum z:
do tego:
Jeśli ktoś ma na to wytłumaczenie, proszę, oświeć mnie.
źródło
Definiowanie tej samej zmiennej w @implementation w więcej niż jednej klasie może również powodować ten problem.
źródło
W moim przypadku w lokalizacji były dwa pliki o tej samej nazwie
źródło
To zadziałało dla mnie
źródło
Ten problem wystąpił po zainstalowaniu Cocoapods. Teraz dzieje się za każdym razem, gdy aktualizuję niektóre kapsułki. Rozwiązanie znalazłem:
Idź do terminalu:
Zaznacz także pozycję „Zawsze osadzaj szybkie biblioteki” w Ustawieniach kompilacji. Powinien być „wyblakły”, co oznacza, że używa domyślnej konfiguracji. Jeśli jest ustawione na ręczne TAK, naciśnij klawisz Delete, aby przywrócić domyślną konfigurację. To zatrzymało zachowanie.
źródło
Dla mnie podczas zalecanych ustawień projektu Xcode8 zaktualizuj „Brak wspólnych bloków” na TAK, co powoduje ten problem.
źródło
Dzisiaj dostałem ten sam błąd. Kluczowym słowem błędu jest
duplicate
. Naprawiam to przez:źródło
Upewnij się, że przypadkowo nie zaimportowałeś pliku .m, możesz usunąć swoje pochodne dane w oknie projektów, a następnie skompilować i uruchomić ponownie.
źródło
Dla każdego, kto ma ten problem, nie widziałem mojej odpowiedzi w żadnej z tych odpowiedzi.
Po wystąpieniu konfliktu scalania .pbxproj, który został ręcznie rozwiązany (choć słabo), w pliku .pbxproj pojawiły się zduplikowane odwołania do poszczególnych plików klas. Usunięcie tych z projektu> Fazy kompilacji> Kompiluj źródła naprawiły dla mnie wszystko.
Mam nadzieję, że to pomoże komuś zejść z linii.
źródło
ld: X duplicate symbols for architecture x86_64
. Naprawiono go, usuwając pliki źródłowe wymienione w komunikacie o błędzie i ponownie dodając je ponownie do projektu.Podobnie jak Juice007, zadeklarowałem i zainicjowałem zmienną typu C w dwóch różnych plikach .m (które nie zostały zaimportowane!)
jednak ta metoda deklarowania i inicjowania zmiennej, nawet w .m, nawet w @implementation, nadaje jej zasięg globalny. Twoje opcje to:
Zadeklaruj jako statyczny, aby ograniczyć zakres do klasy:
Usuń inicjalizację (która spowoduje, że dwie klasy będą współdzielić globalny var):
Zadeklaruj jako właściwość:
Zadeklaruj go jako właściwy iVar w interfejsie @
źródło
W moim przypadku miałem dwie
main()
metody zdefiniowane w moim projekcie i usunięcie jednej rozwiązało problem.źródło
Ostatnio miałem problem z głową szukając źródła błędu. Zastanawiałem się, kiedy dowiedziałem się, że moja aplikacja nie chce się kompilować, po prostu dlatego, że miałem następujący fragment kodu w różnych klasach:
Mam nadzieję, że może komuś pomóc.
źródło
Mam nadzieję, że na pewno ci to pomoże
Mam ten sam błąd 3 zduplikowane symbole dla architektury x86_64
w moim przypadku skopiowałem kod z innego pliku tego samego projektu np. kod pliku Am do Bm i po kompilacji dostałem błąd jako wzmianka. i rozwiązałem błąd, zmieniając nazwę globalnej zmiennej.
ten błąd pojawił się w moim przypadku z powodu tego samego zadeklarowania zmiennej globalnej w obu plikach.
źródło
Ten sam błąd wystąpił po dodaniu repozytorium pod
dla już dodanego kodu źródłowego (SWRevealViewController) z gitHub. Tak więc błąd zostanie naprawiony poprzez usunięcie kodu źródłowego lub repozytorium pod.
Przypadek nr 2:
Za drugim razem ten błąd pojawił się, gdy zadeklarowałem stałą w pliku .h .
źródło
Powyższe odpowiedzi nie działały dla mnie. Oto jak sobie z tym poradziłem:
1) w wyszukiwarce usuń cały folder Pods i plik Podfile.lock 2) zamknij projekt xcode 3) uruchom instalację pod w terminalu 4) otwórz projekt xcode, uruchom polecenie czystej kompilacji
Później pracował dla mnie.
źródło
Ten sam problem występuje ze mną, kiedy integrowałem projekt lob w swoim projekcie.
W rzeczywistości projekt lob ma również pliki AFNetworking, więc usuwam pliki .m z projektu lob.
W rzeczywistości pliki .m powodują konflikty z plikami Mojego projektu POd / AFNetworking / .m
źródło
W Xcode 6.3.2. Sprawdziłem wszystkie możliwości jak poniżej
1: Nie importowałem pliku .m do mojego projektu.
2: Usunięto
-ObjC
z flagi flagi innego linkera .3: Usunąłem wszystkie moje dane pochodne .
wciąż otrzymuję ten sam błąd. Usunąłem ten błąd, usuwając dowolną deklarację zmiennej z
.pch
pliku . w moim przypadku zadeklarowałemAppDelegate
obiekt w.pch
pliku. w końcu znalazłem powód, który powoduje błąd. więc usuwam deklarację dowolnej zmiennej z pliku .pch i urok pracy mojego projektu.źródło
Kolejnym głupim błędem, który spowoduje ten błąd, są powtarzające się pliki. Przypadkowo skopiowałem niektóre pliki dwa razy. Najpierw poszedłem do Cele -> Fazy budowania -> Kompiluj źródła. Tam zauważyłem dwa pliki na tej liście dwa razy i ich lokalizacje.
źródło
Mam również ten błąd dzisiaj, ponieważ zdefiniowałem wartość
.m
stałej w pliku, ale zdefiniowałem inny.m
plik, który również zawiera tę wartość stałą, co oznacza, że ma ona dwie takie same wartości stałe, więc pojawia się ten błąd. A moim rozwiązaniem jest dodanie słowa kluczowego „static
” przed wartością stałą. Na przykład:A potem buduję projekt, nie będzie zgłaszał tego błędu.
źródło