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?


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.


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!


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


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.


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.


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.


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.


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.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.