Kiedy próbuję uruchomić projekt Xcode, kończy się niepowodzeniem i pojawia się błąd informujący, że mam zduplikowane symbole. Szukałem w Internecie, gdzie znalazłem te duplikaty, ale nie miałem szczęścia:
Jakieś pomysły, jak to naprawić?
ios
objective-c
xcode
linker-errors
picciano
źródło
źródło
Odpowiedzi:
Z błędów wynikałoby, że FacebookSDK.framework już zawiera klasy Bolts.framework. Spróbuj usunąć dodatkowe Bolts.framework z projektu.
źródło
Dla mnie pomogło to zmienić ustawienie kompilatora „No Common Blocks” na NIE: Wydaje się, że to ma sens, ustawienie jest wyjaśnione tutaj: Do czego służy GCC_NO_COMMON_BLOCKS?
źródło
Używając Xcode 8, opcja „Aktualizuj projekt do zalecanych ustawień” została włączona „Brak wspólnych bloków” dla mojego projektu.
Przełączenie z powrotem na OFF naprawiło wszystko.
źródło
Dla mnie było to, że przez pomyłkę zaimportowałem plik jako .m, a nie .h
źródło
Zepsułem moje strąki podczas obniżania wersji kapsuły i udało mi się rozwiązać problem z powielonymi symbolami dla architektury arm64 , usuwając strąki i instalując je ponownie za pomocą:
źródło
Innym rozwiązaniem jest:
Następnie w wynikach wyszukiwania zobaczysz 1 lub 2 pliki.
Usuń jeden z nich i skompiluj ponownie . Powinien się teraz ponownie skompilować, ponieważ został tylko jeden plik i nie ma więcej konfliktów podczas kompilacji.
Jeśli to nie zadziała, prawdopodobnie plik zawiera błędy i powinieneś usunąć je wszystkie, a następnie ponownie skompilować. Powinno znowu działać.
źródło
Po uaktualnieniu do Xcode 8 otrzymałem wiadomość o konieczności uaktualnienia do zalecanych ustawień. Zaakceptowałem i wszystko zostało zaktualizowane. Zacząłem mieć problem z czasem kompilacji:
Powielony symbol dla XXXX Powielony symbol dla XXXX Powielony symbol dla XXXX
Łącznie 143 błędy. Poszedłem do celu-> Ustawienia kompilacji -> Brak wspólnych bloków -> Ustaw na NIE. To rozwiązało problem. Problem polegał na tym, że zintegrowane projekty miały wspólne bloki kodu i dlatego nie były w stanie go skompilować. Wyjaśnienie można znaleźć tutaj .
źródło
Ten błąd występuje, gdy konsolidator próbuje połączyć pliki obj. Kilka powodów, dla których mógłbym wymyślić ten błąd, to:
Zduplikowana funkcja / klasa jest zdefiniowana w dwóch różnych miejscach / plikach w projekcie i tylko jeden z nich miał zostać skompilowany dla dowolnej odmiany polecenia kompilacji. Ale w jakiś sposób oba te pliki zostały skompilowane w twoim projekcie. Musisz więc sprawdzić warunki if-else lub inne zależności, które dodają pliki src do listy plików potrzebnych do skompilowania i usunąć niepotrzebny plik dla twojego konkretnego polecenia kompilacji.
Powielona funkcja / klasa jest przypadkowo zdefiniowana w dwóch różnych miejscach / plikach w projekcie. Usuń złą definicję.
Wyczyść katalog OBJ przed kolejną kompilacją, mogą tam znajdować się stare pliki obj z poprzednich kompilacji, które mogą powodować ten konflikt.
PS Nie jestem ekspertem, ale tak rozwiązałem ten problem, gdy się z nim zmierzyłem. :)
źródło
Jeśli przenosisz się do Xcode 7 lub 8 i otwierasz naprawdę stary projekt, napotkałem ten problem:
w
SomeConstFile.h
w
SomeConstFile.m
Wcześniejsze wersje kompilatora zakładały, że definicja w pliku nagłówkowym jest extern, więc włączenie SomeConstFile.h w każdym miejscu było w porządku.
Teraz musisz jawnie zadeklarować te stałe jako extern:
w
SomeConstFile.h
źródło
Poniżej patch działa dla mnie .. :)
Ustawienie go z powrotem na NIE rozwiązało problem!
źródło
Cóż, czasami, gdy używasz SDK, takiego jak FB lub Biblioteki, takie jak Vuforia lub GoogleAnalytics, dodanie przykładowych projektów może spowodować problem, że zawierają już Framework i tym podobne, więc musisz upewnić się, że nie powtarzasz symboli, które dodajesz ręcznie, gdy są już zawarte w próbkach
źródło
Dla mnie problemem był styl tworzenia const, który działał dobrze aż do tego iOS8 .. miałem kilka linijek jako:
w moim pliku h. Sześć wierszy, takich jak, zaowocowało 636 plików linkera, po ustawieniu wspólnych bloków na NIE. (14k + jeśli TAK). Przeniesiono wiersze do .m po usunięciu .h z deklaracji wartości i kompilacja była dobra.
Mam nadzieję, że to pomoże innym!
źródło
W moim przypadku powód był zbyt głupi:
Miałem plik Constant.h, w którym zdefiniowałem makra. Myślałem o zrobieniu tam NSString. i zrobiłem to:
spowodowało to problem z poleceniem Duplicate Symbols for Architecture arm64 i Linker z kodem zakończenia 1. Usunięcie linii const NSString działało dla mnie.
źródło
sprawdź plik dołączany, miałem ten problem, ponieważ przypadkowo # zaimportowałem „nazwa_pliku.m” zamiast „nazwa_pliku.h”, autokorekta (tabulator) wstawiła „m” zamiast „h”.
źródło
Z błędów wynikałoby, że wszystkie klasy pojawiałyby się wielokrotnie. Znajdź i usuń te, które będą działać.
Tworzę plik AppDelegate.h i .m, tworząc wiele razy. Więc ten błąd wystąpi. Na koniec znajdź i usuń te klasy, które działają dobrze dla mnie.
źródło
Aby rozwiązać ten problem, przejdź do Fazy budowania i wyszukaj zduplikowany plik, taki jak (facebookSDK, unityads) i usuń (rozszerzenie plik.o), a następnie zbuduj ponownie.
źródło
Dla mnie utworzyłem metodę o nazwie
sampleMethod
w ViewController_A i utworzyłem tę samą metodę w ViewController_B, spowodowało to ten błąd, a następnie zmieniłem nazwę metody w ViewController_B nasecondSampleMethod
. Naprawiono błąd.Wydaje się, że dobrą funkcją jest redukcja kodu i unikanie duplikowania tego samego kodu w wielu miejscach.
Próbowałem zmienić typowe bloki z Tak na Nie, a następnie włączyć testowalność z Tak na Nie. Nie zadziałało. Sprawdziłem zduplikowane pliki również w fazach kompilacji, ale nie ma zduplikowanych plików.
źródło
Wystąpił ten problem, ponieważ leniwie definiowałem zmienną w moim .m poza metodą, a następnie w innym pliku .m definiowałem inną zmienną o tej samej nazwie poza metodą. Powodowało to problem ze zduplikowaną nazwą zmiennej globalnej.
źródło
Problem polegał na tym, że ręcznie włączyłem framework, ale potem włączyłem ten sam framework do CocoaPods, nie wiedząc, że to zrobiłem. Po usunięciu jednego lub drugiego problem zniknął
źródło
Zobacz Błąd duplikatu symbolu podczas dodawania podklasy NSManagedObject, zduplikowane łącze
źródło
Udało mi się rozwiązać ten błąd, który mówił: „158 zduplikowanych symboli dla architektury armv7, 158 zduplikowanych symboli dla architektury arm64” --- Jeśli to również otrzymujesz, oznacza to, że próbujesz skompilować plik, który jest importowany lub dziedziczenie struktury lub biblioteki statycznej mającej odwołania do kodu lub plików C ++. Łatwym sposobem radzenia sobie z tym jest zmiana rozszerzenia pliku .m na .mm. W ten sposób postępuje się, jeśli używasz celu C, ale nie jestem pewien w Swift.
Również w ustawieniach kompilacji - możesz zaktualizować „inne flagi konsolidatora” do -lc ++
źródło
Jeśli ktoś eksperymentuje z tym, pracując na Flutterze, nie próbuj dezintegrować strąków, pod init.
Jak rozwiązałem, uruchomiono flutter clean, flutter run -d [urządzenie iOS]
Nadzieja może komuś pomóc.
źródło
Plz Zmień ustawienie.
Krok 1: Przejdź do CELE -> Ustawienia kompilacji -> Brak wspólnych bloków -> Nie
Krok 2: Idź do CELE -> Ustawienia kompilacji -> włącz testowalność -> Nie
źródło