Файл универсален (три среза), но в нем нет (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, также должны запускаться. Но вы потеряете некоторые конкретные оптимизации. В любом случае это должно быть временным решением проблемы.
Николай
2
Платформа
Railwayparade
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» в настройках сборки цели, и теперь все в порядке!

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

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

Артур Джен
источник
13

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

Ertebolle
источник
5

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

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

RAZ
источник
4

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

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

Panky
источник
1

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

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

Рафаэль Эйрес
источник
0

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

Джей Имерман
источник