2012-04-27 22 views
8

Wiem, że to pytanie zostało zadane wcześniej, ale próbowałem wszystkiego, co mogłem znaleźć i nic z tego nie zadziałało.Zapośredniczenie sieci w sieci iOS: Powielony błąd symboli Z all_load i ObjC

Mam w pełni funkcjonalną aplikację na iOS, którą chcę teraz zintegrować z zapośredniczeniem sieci AdMob. Udało mi się już poprawnie pracować z AdMob, ale Mediator wymaga ustawienia łączników "-all_load" i "-ObjC" (w innych flagach Linkera). Rzeczywiście, jeśli zbuduję bez nich, żadne reklamy nie są wyświetlane, a w dziennikach jest napisane, że wymaga ich ustawienia.

Problem polega na tym, że nie mogę pomyślnie zbudować aplikacji z zestawem all_load lub ObjC. Czytałem, że ObjC nie jest konieczny dla aplikacji na iOS, ale nawet bez niego nadal mam problem z all_load. Problem polegający na tym, że dostaję ten błąd:

ld: duplikat symbolu [tutaj niektóre polecenia] [niektóre biblioteki statyczne] i [ścieżka do tego samego polecenia] dla architektury armv7 clang: błąd: komenda linker nie powiodła się z kodem zakończenia 1 (użyj -v, aby zobaczyć wywołanie)

Po usunięciu uszkodzonej biblioteki statycznej i odbudowaniu, błąd po prostu przechodzi do następnej biblioteki statycznej, którą mam i tak dalej. Ponieważ próbuję zainstalować mediatora reklam, moja aplikacja wymaga zainstalowania kilku statycznych bibliotek z różnych sieci reklamowych.

Oto kilka rozwiązań, które próbowałem, które nie powiodło się:

  • kompilacji dla armv6 nie ARMv7 (nie idealnym naprawić tak, jak chcę oba)
  • zastępując all_load z force_load [ścieżka do biblioteki] i testowanie na rzeczywistym urządzeniu z iOS, ponieważ najwyraźniej ta metoda nie działa z symulatorem (nie wydaje się, aby cokolwiek zrobić, otrzymuję dokładnie ten sam problem, mimo to wykorzystuję tę samą ścieżkę, która znajduje się w błędzie)
  • usuwanie all_load (kompilacja, ale jak powiedziałem, wymaga tego mediacja AdMob)
  • usuwanie bibliotek obrażając (oczywiście nie działa z powodu błędu narzeka każdy z moich statycznych bibliotek, które muszę)

Każda pomoc jest mile widziana w rozwiązaniu tego problemu.

EDIT: Rozwiązanie mojego problemu

Jak się okazuje, jedyne co mi się nie starają się tylko przy użyciu -ObjC na rzeczywiste urządzenie, to wydaje się działać dla mnie!

EDIT2: Nieważne, nadal występują problemy

Zacytuję mój komentarz poniżej pytany co biblioteki statyczne były przyczyną mnie problemy:

„Cóż mam Pośrednictwo AdMob pracuje bez żadnych innych sieci przez wyłączając all_load i włączając w to ObjC, który działał poprawnie dopóki nie dodałem mojej pierwszej sieci, Adfonic, która obecnie jest w konflikcie z MobileAppTracking, otrzymuję: ld: duplikat symbolu _OBJC_IVAR _ $ _ Reachability.reachabilityRef w [ścieżka]/Adfonic SDK/libAdfonic .a (Reachability.o) i [path]/Objects-normal/armv6/Reachability.o dla architektury armv6 clang: błąd: komenda linker nie powiodła się z kodem zakończenia 1 (użyj -v, aby zobaczyć wywołanie) "

Miałem nagie kości AdMob Mediator pracując poprzez usunięcie wszystkich innych bibliotek sieci reklamowych, ale z moją pierwszą trzecią -party integracja sieci dostaję innego konfliktu między tym i śledzenia bibliotekę i wprowadziły, MobileAppTracking. Wciąż szuka rozwiązania, aby rozwiązać „zduplikowane symboli”.

EDIT 3

mogę potwierdzić, że każda pojedyncza sieć reklamowa wypróbowana przez AdMob Mediator (z wyjątkiem samej AdMob) nie może się skompilować, w większości z powodu powielonego symbolu błędu ors. Nie rozumiem, jak to możliwe, ponieważ jestem pewien, że nie jestem jedynym, który korzysta z usługi mediacji AdMob.

EDIT 4

Zacytuję mój komentarz poniżej:

„I rzeczywiście udało się uzyskać większość sieci reklamowych i bibliotek pracujących dla mnie, musiałem usunąć sporo odniesień wynikających Skompiluj źródła, ale dostałem je bez kompilacji, nadal używające -ObjC i -all_load! "

+0

Czy możesz wymienić niektóre z tych statycznych bibliotek, na które narzeka? Próbuję odtworzyć problem. – RajPara

+0

Dobrze, że Mediacja AdMob działa bez żadnych innych sieci, wykluczając all_load i włączając w to ObjC, który działał bez zarzutu, dopóki nie dodałem mojej pierwszej sieci, Adfonic, która obecnie jest w konflikcie z MobileAppTracking, otrzymuję: ld: duplikat symbolu _OBJC_IVAR_ $ _Reachability.reachabilityRef w [ścieżka]/Adfonic SDK/libAdfonic.a (Reachability.o) i [ścieżka]/Objects-normal/armv6/Reachability.o dla architektury armv6 clang: błąd: polecenie linker nie powiodło się z kodem zakończenia 1 (użyj opcji -v, aby wyświetlić wywołanie) – Paul

+1

Nie udało mi się odtworzyć tego problemu. Dostałem AdMob i AdFonic bez żadnego błędu. Jakiej wersji XCode i iOS używasz? Czy próbujesz po prostu dodać inne sieci do przykładu AdMob ze swojej witryny? – RajPara

Odpowiedz

0

Miałem ten sam problem. Po dodaniu -ObjC w innych linkerach nie mogłem skompilować (narzekałem na duplikowanie symboli i osiągalność). Usunięcie go pozwoliłoby mi się skompilować, ale AdMob powodował awarię aplikacji.

Po wielu testach i zabawie z wieloma parametrami wykonałem następujące czynności: Poszedłem do Targets -> AppName -> Build Phases -> Compile Sources i removed Reachability.m. Wszystko było w porządku, a AdMod działał bez awarii.

+0

Tak, to był mój problem, kilka bibliotek stron trzecich powodowało błędy linkera przez dodanie -ObjC, rozwiązaniem było dokładne zbadanie każdego błędu łącznika i usunięcie .m dla każdego błędu łącznika, który najprawdopodobniej był już zawarty w innej bibliotece. Czasami nie było jasne, które z nich usunąć, ale w moim przypadku Reachability.m było jednym z nich. – Paul

2

można użyć -force_load „ścieżka/do/pliku/libGoogleAdMobAds.a” zamiast -all_load, to załadować libGoogleAdMobAds tylko

+0

Jak już powiedziałem powyżej, próbowałem tego, ale nic nie naprawiło, zakładając, że mam właściwą ścieżkę. Jeśli nie używam właściwej ścieżki, pojawia się błąd informujący, że plik nie został znaleziony i jeśli użyję ścieżki podanej w błędzie duplikatu symboli, nie otrzymam błędu nie znaleziono pliku, ale nadal otrzymuję duplikat błędu dla tej biblioteki. – Paul

+0

Hmm, przypuszczam, że to powinno zadziałać, czy próbowałeś czystego? Myślę, że ścieżka do użycia jest względną ścieżką od miejsca, w którym żyje twój projekt XCode. – RajPara

+0

Po prostu wypróbowałem czystość, a następnie użyłem metody force_load, ale wciąż mam ten sam problem. Otrzymałem następujący komunikat o błędzie z innymi łącznikami ustawionymi na "-fobjc-arc -force_load" MMSDK/libMMSDK_4.5.5.a "" (-fobjc-arc wymagany jest w innej bibliotece): ld: zduplikowany symbol _OBJC_METACLASS _ $ _ SBJsonParser w [ścieżka] /Objects-normal/armv7/SBJsonParser.o i MMSDK/libMMSDK_4.5.5.a (SBJsonParser.o) dla architektury armv7 clang: błąd: polecenie linker nie powiodło się z kodem zakończenia 1 (użyj -v, aby zobaczyć wywołanie) To jest podczas próby użycia Mellenial SDK, ale mam ten sam problem z innymi. – Paul

1

Dodaj kompilacji ustawienia zdefiniowane przez użytkownika o nazwie „ EXCLUDED_SOURCE_FILE_NAMES ": , jak pokazano w this article, lub zmodyfikuj plik .a zgodnie z this article.

0

Usuwanie wszystkich folderów z folderu "Dodatek" z wyjątkiem folderu "zapośredniczenie".

To działa dla mnie.

1

Czy udało Ci się rozwiązać ten problem?

Właśnie usunięto parametr -all_load i moja aplikacja działa dobrze na moim urządzeniu. Ale nie jestem pewien tej sztuczki.

+0

To działało dla mnie natychmiast po usunięciu tego – kezi

Powiązane problemy