Файл универсален (три среза), но в нем нет (n) ошибки среза ARMv7-s для статических библиотек на iOS, в любом случае, чтобы обойти?


403

Я обновил версию XCode и при использовании внешних статических библиотек я получаю это сообщение:

ld: файл универсален (3 среза), но не содержит (n) среза armv7s: / file / location для архитектуры armv7s clang: error: сбой команды компоновщика с кодом выхода 1 (используйте -v для просмотра вызова)

Есть ли способ обойти это и добавить поддержку библиотеки, если разработчик библиотеки еще не обновил свою библиотеку?


Кажется, сейчас это хорошее решение - galloway.me.uk/2012/09/hacking-up-an-armv7s-library
— Раджаваня Субраманян

Ответы:


418

Если вы хотите удалить поддержку любой архитектуры, например, ARMv7-s в вашем случае, используйте меню Project -> Build Settings -> удалить архитектуру из «допустимых архитектур».

Вы можете использовать это как временное решение, пока библиотека не будет обновлена. Вы должны удалить архитектуру из основного проекта, а не из библиотеки.

В качестве альтернативы, вы можете установить флаг для вашей конфигурации отладки «Build Active Architecture Only» на «Да». Оставьте в конфигурации выпуска «Build Active Architecture Only» значение «Нет», чтобы перед выпуском вы получили напоминание о необходимости обновления любых сторонних библиотек, которые вы используете.


11
Вам не нужно перекомпилировать библиотеку. Вы можете удалить этот флаг из проекта, который использует библиотеку.
— Николас

4
Это будет работать, так как старые приложения, которые не были скомпилированы с поддержкой armv7s, также должны запускаться. Но вы потеряете некоторые конкретные оптимизации. В любом случае это должно быть временным решением проблемы.
— Николай


6
Удаление armv7s из списка «Действительные архитектуры» работало для меня, но также и удаление из «Архитектур». В обоих случаях, однако, я получил бы No architectures to compile for (ARCHS=i386, VALID_ARCHS=armv7).от компоновщика, который я мог бы решить только путем добавления i386в список допустимых архитектур.
— Левигрокер

6
Нет, armv7s - это набор инструкций процессора A6, который используется в iPhone 5. Поскольку A6 обратно совместим, он все равно будет запускать набор инструкций armv7.
— Николас

191

Я просто переключил «Build Active Architecture Only» на «Yes» в настройках сборки цели, и теперь все в порядке!


1
@ Blasco73 Ты хоть знаешь, что ты классный? Вам следует. Вот, вы, сэр, потрясающие!
— thandasoru

15
Как это может быть хорошим решением. Это устраняет ошибку, но вы получаете сборку только для текущей арки, а не для всех на рынке ...
— esbenr

27

Попробуйте удалить armv7s из "Правильной архитектуры" проекта, чтобы освободить от этой проблемы для телефона iOS 5.1


13

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


5

Поддержка Flurry для iPhone 5 (ARMv7s) Как я уже упоминал во вчерашнем сообщении, Flurry начал работать над версией iOS SDK для поддержки процессора ARMv7s в новом iPhone 5 сразу после анонса в среду.

Я рад сообщить вам, что работа выполнена, и SDK теперь доступен на сайте.


4

используйте меню Проект -> Настройки сборки ->

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


1

В случае, если это случится с кем-то. Я создал свою собственную библиотеку для использования со сторонним кодом. Пока я создавал его для доставки, я случайно оставил свой iPhone 4S подключенным, и поэтому Xcode создавал мою библиотеку только для подключенной архитектуры вместо того, чтобы следовать настройкам проекта. Удалите все подключенные устройства и перестройте библиотеку, свяжите ее, и все будет в порядке.

Надеюсь, поможет.


0

В моем случае я ссылался на стороннюю библиотеку, которая была немного устаревшей (разработанной для iOS 6, на XCode 5 / iOS 7). Поэтому мне пришлось обновить стороннюю библиотеку, сделать Clean and Build, и теперь она успешно собирается.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.