Powielone symbole dla armatury architektury 64

103

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:

wprowadź opis obrazu tutaj

Jakieś pomysły, jak to naprawić?

picciano
źródło
1
to znaczy, że masz za dużo BFAppLinkReturnToRefererView
Andrey Chernukha
Możesz też trochę posprzątać projekt, zamiast łączyć się z frameworkami znajdującymi się na pulpicie. :)
picciano
W moim przypadku dodałem extern NSString * const tColor; w pliku .h i NSString const * tColor = @ "# 000022"; w dwóch różnych klasach .m.
ios_dev
Możesz znaleźć to, czego szukasz, tutaj stackoverflow.com/a/46678210/988941
MoOx

Odpowiedzi:

66

Z błędów wynikałoby, że FacebookSDK.framework już zawiera klasy Bolts.framework. Spróbuj usunąć dodatkowe Bolts.framework z projektu.

picciano
źródło
23
jak? czy możesz mnie poprowadzić krok po kroku
Imdad Ali,
68

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?

tania_S
źródło
Jesteś meżczyzną! Właśnie utworzyłem nowy projekt xCode 7.3.1, a ustawienie domyślne to TAK :(
Yaro
4
Ta opcja została włączona dla mnie przez okno „Zaktualizuj projekt do zalecanych ustawień” w Xcode.
Commscheck
Jesteście najlepsi
showmyroutes
bezcenna wskazówka, ale w moim przypadku nie pomogło! : O
Fattie
49

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.

Adam G.
źródło
2
Zaktualizuj projekt do zalecanych ustawień, jak to zrobić? mam na myśli z jakiego menu?
Sazzad Hissain Khan
@SazzadHissainKhan To jest w ustawieniach kompilacji.
Wycieczka
21

Dla mnie było to, że przez pomyłkę zaimportowałem plik jako .m, a nie .h

Jason Silver
źródło
To LOL, ale prawda; D
Vladimir,
to mi się po prostu przydarzyło ... Za wszystko obwiniam uzupełnianie kodu
user426132
21

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ą:

pod deintegrate
pod install
Matea
źródło
Korzystałem z Google Places SDK, zintegrowanego przez CocoPods - 3.9.0, i ta odpowiedź rozwiązała mój problem.
andrewlundy
12

Innym rozwiązaniem jest:

Wybierz Projekt -> Cel -> Faza kompilacji -> Kompiluj źródło -> wyszukaj plik, który jest wymieniony w trzeciej ostatniej linii błędu (w twoim przypadku BFAppLinkReturnToRefererView.o ).

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
2
Niezwykle niedoceniana odpowiedź, dzięki za pomoc, Lukas! :)
patreu22
Żaden problem, cieszę się, że rozwiązał twój problem :)
10

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 .

iosCurator
źródło
9

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:

  1. 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.

  2. Powielona funkcja / klasa jest przypadkowo zdefiniowana w dwóch różnych miejscach / plikach w projekcie. Usuń złą definicję.

  3. 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. :)

ManyuBishnoi
źródło
9

Jeśli przenosisz się do Xcode 7 lub 8 i otwierasz naprawdę stary projekt, napotkałem ten problem:

w SomeConstFile.h

NSString * const kAConstant;

w SomeConstFile.m

NSString *const kAConstant = @"a constant";

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

extern NSString * const kAConstant;
Dan Loughney
źródło
1
Dzięki za to! Zmagałem się z problemem z plikiem constants.h, który tworzyłem lol
Sung Min Kim
1
Dziękuję za odpowiedź. Ja też miałem ten sam problem i twoja odpowiedź zadziałała dla mnie ...
reetu
1
Dzięki, walczyłem z tym problemem przez ostatnie 3-4 godziny
Sumit Kumar Saha
9

Poniżej patch działa dla mnie .. :)

Step 1: Go to TARGETS -> Build Settings -> No Common Blocks -> No

Step 2: Go to TARGETS -> Build Settings -> enable testability -> No

Ustawienie go z powrotem na NIE rozwiązało problem!

Saumil Shah
źródło
2
Krok 2: Rozwiązałem mój problem. Dziękuję :)
Dorald
2

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

IsPha
źródło
2

Dla mnie problemem był styl tworzenia const, który działał dobrze aż do tego iOS8 .. miałem kilka linijek jako:

int const kView_LayoutCount = 3;

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!

rysował..
źródło
2

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:

NSString const *kGreenColor = @"#00C34E";

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
2

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”.

Mike Zriel
źródło
Dziękuję bardzo, nie zdawałem sobie sprawy, że popełniłem ten błąd, zabierało mi to cały czas. Jeszcze raz dziękuję 👍
Supertecnoboff
1

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.

Karthickkck
źródło
1

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.

Mahmoud abualamrien
źródło
0

Dla mnie utworzyłem metodę o nazwie sampleMethodw 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 na secondSampleMethod. 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. Mohan
źródło
0

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.

Albert Renshaw
źródło
0

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ął

MobileMon
źródło
0

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 ++

Manish Gupta
źródło
0

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.

Dx_
źródło
0

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

Dnyaneshwar Shinde
źródło