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

398

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

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

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

Теги:
xcode
static-libraries
ios6

8 ответов

434
Лучший ответ

Если вы хотите удалить поддержку любой архитектуры, например ARMv7-s в своем случае, используйте меню Project → Настройки сборки → удалить архитектуру из "допустимых архитектур".

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

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

  • 0
    Хорошее решение, но есть ли способ добавить поддержку без компиляции библиотеки?
  • 11
    Вам не нужно перекомпилировать библиотеку. Вы можете удалить этот флаг из проекта, который использует библиотеку.
Показать ещё 17 комментариев
188

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

  • 0
    сделал это и для меня, но хотел бы знать, что это значит для моего проекта ...
  • 1
    @ Blasco73 Ты хоть знаешь, что ты классный? Вам следует. Вот, вы, сэр, потрясающие!
Показать ещё 2 комментария
28

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

13

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

5

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

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

  • 0
    хорошая информация, спасибо.
4

используйте меню Project → Настройки сборки →

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

1

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

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

0

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню