Plik jest uniwersalny (trzy wycinki), ale nie zawiera błędu wycinania (n) ARMv7-s dla bibliotek statycznych na iOS, czy mimo to można go obejść?

403

I uaktualniony Xcode wersję i podczas korzystania z zewnętrznych bibliotek statycznych, dostaję komunikat:

ld: plik jest uniwersalny (3 wycinki), ale nie zawiera (n) wycinka armv7s: / file / location for architektury armv7s clang: error: polecenie linkera nie powiodło się z kodem wyjścia 1 (użyj -v, aby zobaczyć wywołanie)

Czy jest jakiś sposób na obejście tego i dodanie obsługi biblioteki, jeśli twórca biblioteki nie zaktualizował jeszcze swojej biblioteki?

Dafna Elazazer
źródło
Na razie wydaje się to dobrym rozwiązaniem - galloway.me.uk/2012/09/hacking-up-an-armv7s-library
Rajavanya Subramaniyan

Odpowiedzi:

418

Jeśli chcesz usunąć obsługę dowolnej architektury, na przykład ARMv7-s , użyj menu Projekt -> Ustawienia kompilacji -> usuń architekturę z „prawidłowych architektur”.

Możesz użyć tego jako rozwiązania tymczasowego do czasu aktualizacji biblioteki. Musisz usunąć architekturę z głównego projektu, a nie z biblioteki.

Alternatywnie możesz ustawić flagę dla konfiguracji debugowania „Buduj tylko architekturę aktywną” na Tak. Pozostaw opcję „Kompiluj tylko architekturę aktywną” w konfiguracji wersji na Nie, aby otrzymać przypomnienie przed wydaniem, że należy zaktualizować używane biblioteki innych firm.

Mikołaj
źródło
11
nie musisz rekompilować biblioteki. możesz usunąć tę flagę z projektu korzystającego z biblioteki.
Nicholas
4
Będzie działać, ponieważ stare aplikacje, które nie zostały skompilowane z obsługą armv7, również muszą działać. Ale stracisz kilka konkretnych optymalizacji. To i tak powinno być tymczasowe obejście.
Nicholas
2
Framework Dropbox został zaktualizowany dla tego problemu patrz forums.dropbox.com/topic.php?id=90014
railwayparade
6
Usuwanie armv7 z listy Ważnych Architektur działało dla mnie, jednak tak samo było z usunięciem z Architektury. W obu przypadkach otrzymałem No architectures to compile for (ARCHS=i386, VALID_ARCHS=armv7).jednak linker, który mogłem rozwiązać tylko poprzez dodanie i386do listy prawidłowych architektur.
levigroker
6
Nie, armv7s to zestaw instrukcji procesora A6, który jest używany w iPhonie 5. Ponieważ A6 jest kompatybilny wstecz, nadal będzie działał zestaw instrukcji armv7.
Nicholas
191

Po prostu przestawiłem opcję „Buduj tylko aktywną architekturę” na „Tak” w ustawieniach kompilacji celu i teraz jest OK!

Blasco73
źródło
1
@ Blasco73 Czy wiesz nawet, że jesteś niesamowity? Powinieneś. Proszę bardzo, jesteście niesamowici!
thandasoru
15
Jak może to być dobre rozwiązanie. Usuwa błąd, ale dostajesz tylko kompilację dla bieżącego łuku, nie wszystkie na rynku ...
esbenr
27

Spróbuj usunąć armv7s z „Poprawnej architektury” projektu, aby zwolnić z tego problemu dla telefonu z systemem iOS 5.1

Arthur Jen
źródło
13

Właśnie opublikowałem tutaj poprawkę , która obowiązywałaby również w tym przypadku - w zasadzie wykonujesz szesnastkowo znajdź i zamień w bibliotece zewnętrznej, aby myśleć, że jest to kod ARMv7s. Powinieneś być w stanie lipopodzielić go na 3 biblioteki statyczne, powielić / zmodyfikować ARMv7, a następnie użyć lipoponownie, aby skompletować nową bibliotekę dla wszystkich 4 architektur.

Ertebolle
źródło
5

Obsługa Flurry dla iPhone'a 5 (ARMv7s) Jak wspomniałem we wczorajszym poście, Flurry rozpoczął pracę nad wersją iOS SDK do obsługi procesora ARMv7s w nowym iPhonie 5 natychmiast po ogłoszeniu w środę.

Z przyjemnością informuję, że praca została zakończona, a pakiet SDK jest już dostępny na stronie.

RAZ
źródło
4

użyj menu Projekt -> Ustawienia kompilacji ->

następnie usuń armv7 z „poprawnych architektur”. Jeśli wybrano standard, usuń go, a następnie dodaj armv7.

Panky
źródło
1

W przypadku, gdy stanie się to komuś. Zbudowałem własną bibliotekę do użytku z kodem innej firmy. Podczas budowania go do dostarczenia, przypadkowo zostawiłem podłączonego iPhone'a 4S, więc Xcode zbudował moją bibliotekę tylko dla architektury podłączonej zamiast postępować zgodnie z ustawieniami projektu. Usuń wszystkie podłączone urządzenia i przebuduj bibliotekę, połącz je i powinieneś być w porządku.

Mam nadzieję, że to pomoże.

Raphael Ayres
źródło
0

W moim przypadku łączyłem się z biblioteką innej firmy, która była nieco stara (opracowana dla iOS 6 na XCode 5 / iOS 7). Dlatego musiałem zaktualizować bibliotekę innej firmy, wykonać czyszczenie i kompilację, a teraz kompilacja przebiega pomyślnie.

Jay Imerman
źródło