Файл є універсальним (три фрагменти), але він не містить помилки (n) ARMv7-зрізу для статичних бібліотек на iOS, все-таки обходити?


403

Я оновив версію Xcode і, використовуючи зовнішні статичні бібліотеки, отримую це повідомлення:

ld: файл є універсальним (3 фрагменти), але не містить (n) armv7s зріз: / файл / місце для архітектури armv7s clang: error: команда linker не вдалася з кодом виходу 1 (використання -v для перегляду виклику)

Чи є спосіб обійти це питання і додати підтримку до бібліотеки, якщо розробник бібліотеки ще не оновив свою бібліотеку?


Це здається гарним рішенням на даний момент - galloway.me.uk/2012/09/hacking-up-an-armv7s-library
Раджаванія Субраманіян

Відповіді:


418

Якщо ви хочете видалити підтримку будь-якої архітектури, наприклад, ARMv7-s у вашому випадку, скористайтеся меню Project -> Settings Settings -> видаліть архітектуру з "дійсних архітектур".

Ви можете використовувати це як тимчасове рішення, поки бібліотека не буде оновлена. Ви повинні видалити архітектуру з вашого основного проекту, а не з бібліотеки.

Крім того, ви можете встановити прапор для конфігурації налагодження "Збудувати лише активну архітектуру" на "Так". Залиште "Конфігурацію випуску лише для активної архітектури" на "Ні", тому ви отримаєте нагадування перед тим, як звільнити, що вам слід оновити будь-які сторонні бібліотеки, якими ви користуєтесь.


11
не потрібно перекомпілювати бібліотеку. ви можете видалити цей прапор із проекту, який використовує бібліотеку.
Миколай

4
Він буде працювати, оскільки старі програми, які не були складені з підтримкою armv7s, також повинні працювати. Але ви втратите деякі конкретні оптимізації. Це все одно має бути тимчасовим рішенням.
Миколай


6
Видалення armv7s зі списку "Дійсні архітектури" працювало для мене, однак так само було видалено його з "Архітектури". В обох випадках, однак, я отримав би No architectures to compile for (ARCHS=i386, VALID_ARCHS=armv7).лінкер, який я міг вирішити, лише додавши i386до списку Дійсні архітектури.
levigroker

6
Ні, armv7s - це набір інструкцій процесора A6, який використовується в iPhone 5. Оскільки A6 є сумісним назад, він все ще буде виконувати набір інструкцій armv7.
Микола

191

Я просто переключив "Зробити лише активну архітектуру" на "Так" у налаштуваннях збирання цілі, і зараз це нормально!


1
@ Blasco73 Ви навіть знаєте, що ви чудові? Ти повинен. Ось, пане, чудово!
thandasoru

15
Як це може бути хорошим рішенням. Він видаляє помилку, але ви отримуєте лише збірку для поточної арки, не всі на ринку ...
esbenr

27

Спробуйте видалити armv7s з "Дійсна архітектура", щоб вийти з цього випуску для телефону iOS 5.1


13

Я просто розмістив виправлення тут , що також буде застосовуватися в даному випадку - в основному, ви робите шестигранную знахідку і замінити в вашої зовнішньої бібліотеці , щоб зробити його думати , що це ARMv7s коду. Ви повинні мати можливість lipoрозбивати його на 3 статичні бібліотеки, дублювати / змінювати одну ARMv7, а потім lipoзнову використовувати для збирання нової бібліотеки для всіх 4 архітектур.


5

Підтримка шквалу для iPhone 5 (ARMv7s) Як я вже згадував у вчорашньому пості, Flurry почав працювати над версією SDK iOS для підтримки процесора ARMv7s в новому iPhone 5 відразу після оголошення в середу.

Я радий сказати вам, що робота зроблена і SDK тепер доступний на сайті.


4

використовувати меню Проект -> Налаштування збірки ->

потім видаліть armv7s з "дійсних архітектур". Якщо обрано стандарт, видаліть його та додайте armv7.


1

У випадку, якщо це трапиться з кимось. Я створив власну бібліотеку для використання з кодом третьої сторони. Поки я будував його для доставки, я випадково залишив підключений iPhone 4S, і тому Xcode побудував мою бібліотеку лише для підключеної архітектури замість того, щоб дотримуватися налаштувань проекту. Вийміть усі підключені пристрої та відновіть бібліотеку, зв’яжіть її, і у вас все буде гаразд.

Сподіваюся, це допомагає.


0

У моєму випадку я посилався на сторонній бібліотеку, яка була трохи старшою (розроблена для iOS 6, на XCode 5 / iOS 7). Тому мені довелося оновити сторонні бібліотеки, зробити «Очистити і побудувати», і вона тепер успішно будується.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.