Zbar SDK не работает в iOS6

Я использовал ZBar для сканирования в iOS5, и он работал хорошо.

Теперь после обновления до iOS6 он не работает. Он показывает следующую ошибку.

    ld: file is universal (3 slices) but does not contain a(n) armv7s slice: /Users/mac4/Desktop/my desktop/My app/MyApp name 20:09:12  /MyApp name/ZBarSDK/libzbar.a for architecture armv7s
clang: error: linker command failed with exit code 1 (use -v to see invocation)

Что не так с моей стороны?


person sathiamoorthy    schedule 20.09.2012    source источник


Ответы (9)


я недавно столкнулся с той же проблемой. Проблема, похоже, в том, что ZBar SDK не готов к архитектуре armv7s.

Я решил проблему следующим образом:

  1. Перейдите на домашнюю страницу ZBar и перейдите в репозиторий mercurial (прямая ссылка).
  2. Загрузите репозиторий zbar в виде zip.
  3. Разархивируйте файл и перейдите в подпапку с именем «iphone».
  4. Откройте проект XCode.
  5. Удалите папку «Примеры» (папка вызвала ошибку сборки на моем компьютере).
  6. Нажмите «CMD + B» и создайте исходный код.
  7. Найдите новый файл libzbar.a. (Пользователь/Библиотека/Разработчик/Xcode/DerivedData/zbar...)
  8. Замените старый файл libzbar.a в вашем проекте на новый.
  9. Нажмите «CMD + R», и все готово.
person Microns    schedule 24.09.2012
comment
Это работало при работе на устройстве или симуляторе. Когда вы пытаетесь создать продукт, я все еще получаю эту ошибку. _OBJC_CLASS_$_ZBarReaderController, на который ссылается: objc-class-ref в DealElementDisplayController.o _ZBarReaderControllerResults, на который ссылается: -[DealElementDisplayController imagePickerController:didFinishPickingMediaWithInfo:] в DealElementDisplayController.o ld: символы не найдены для архитектуры armv7 - person kgibbon; 08.11.2012
comment
@kgibbon Ты прав. Если вы воспользуетесь этим руководством (federicocappelli. net/2012/10/05/) будет работать нормально. Ключ состоит в том, чтобы объединить выходные файлы. - person Microns; 26.11.2012
comment
Это работает. Только одно, когда вы переходите по прямой ссылке, нажмите «Код», а не «iPhone», и нажмите «Загрузить снимок». Остальные инструкции работают отлично. Спасибо. - person rharvey; 06.11.2013

В Xcode перейдите к настройкам вашей цели, измените «Valid Architectures»

от

armv7,armv7s

to

armv7

Это изменение означает, что ваше приложение не будет использовать возможные оптимизации нового процессора iPhone5, но вам не нужно ждать, пока сторонние библиотеки обновятся, или возиться с шестнадцатеричным редактором.

person marimba    schedule 20.09.2012
comment
Как отмечено в комментариях к отдельному ответу, подходящий способ решить эту проблему - скомпилировать библиотеку, включив в нее правильную архитектуру. Инструкции и загружаемый пакет находятся по адресу federicocappelli.net/2012/10/05/ - person adriandz; 01.02.2013
comment
Каппе, это неправда. armv7s является расширенным набором armv7, поэтому все, что работает на armv7, должно работать и на v7s. Если бы библиотека содержала код, использующий функции armv7 (т. е. для повышения скорости), вы бы потеряли эти функции. Только если бы библиотека работала только на v7s, у вас были бы проблемы. - person marimba; 22.02.2013
comment
adrianz, вы правы, компиляция библиотеки - правильный способ, если вы знаете, что делаете. Но мы говорим о библиотеке, которая 1) не улучшена для armv7s, поэтому перекомпиляция просто добавит нужный флаг, ничего больше не изменяя 2) сложный фрагмент кода с множеством целей и переключателей и 3) вероятно, очень скоро выпущенный с в любом случае соответствующая поддержка v7s. Хотите ли вы скомпилировать библиотеку со всеми возможными известными и неизвестными проблемами для себя, вместо того, чтобы ждать, пока сопровождающие сделают то же самое, и использовать этот ярлык в то же время, зависит от вас, конечно. - person marimba; 22.02.2013
comment
Это сработало для меня, но только после того, как я установил версию iOS 6.0 - она ​​все равно не собиралась для 6.1. - person EHarpham; 25.05.2013
comment
@marimba у меня не работает, я использую xcode 4.6 и устройство iphone5. - person Jaimin Modi; 26.12.2013

Учебник по загрузке/перекомпиляции исходников hg великолепен, но вам не нужно делать все это.

Просто перейдите на http://sourceforge.net/projects/zbar/files/iPhoneSDK/beta/ и скачайте ZBarSDK-1.3.1.dmg, и все будет работать из коробки для последних архитектур (в моем случае armv7, armv7s).

Обновление:

Некоторые из вас сообщали о проблемах с ZBarSDK в XCode 5, iOS 7 или архитектурах arm64... Сегодня я вернулся к этому проекту, столкнулся с похожими проблемами и обнаружил, что существует библиотека ZBarSDK, скомпилированная для работы с iOS 7 по адресу: < a href="http://www.nerdvision.net/app-development/ios/zbar-sdk" rel="nofollow noreferrer">http://www.nerdvision.net/app-development/ios/zbar-sdk . Я просто заменил старые файлы новыми, и мой проект скомпилировался. Обратите внимание, что для архитектур в настройках сборки моего проекта установлено значение amrv7, arm64 ($ARCHS_STANDARD), для базового SDK установлено значение iOS 8.0, а для параметра «Сборка только активных архитектур» установлено значение «Да».

Здесь в SO есть вопрос об этом: zbar SDK не работает для armv7s(iPad 4 iOS 7)

Спасибо @cdescours за подсказку!

person Oscar Salguero    schedule 29.03.2013
comment
действительно самый простой способ просто перетащить заменить libzbar.a на новый. - person Nicolas Manzini; 10.06.2013
comment
ИМХО Это должен был быть ответ - person thandasoru; 25.06.2013
comment
Большое спасибо @RacZo :). - person Alexander Perechnev; 08.12.2013
comment
Как это не ответ номер один? Превосходно. - person Matt Rosemeier; 15.02.2014
comment
После добавления этого я начинаю получать ошибку отсутствия архитектуры arm64. - person Shahab Qureshi; 30.06.2014
comment
Это работает для armv7 и armv7, но не для arm64. Можете ли вы указать, какой libzbar будет работать для всех трех. - person megha; 04.08.2014
comment
Привет! Бывает, что на момент ответа на этот вопрос не было arm64 (и чтобы исключить любые другие архитектуры, говорю... в моем случае armv7, armv7s). Когда я скомпилирую это приложение для arm64, я проверю его и соответствующим образом обновлю ответ. - person Oscar Salguero; 06.08.2014

У меня такая же проблема, но я только что добавил armv6 и armv7, тогда это работает для iOS6. Просто вставьте armv6.

person iKambad    schedule 22.04.2013

в вашей бинарной библиотеке нет кода для armv7s. Поэтому вам следует перекомпилировать его для текущих архитектур.

person Andreas Fink    schedule 20.09.2012

Перекомпилируйте исходный код, я загружаю исходный код для zbar и компилирую в новый проект. Это просто.

person gzfrancisco    schedule 08.11.2012

Клонируйте репозиторий Mercurial и стройте с помощью Xcode. Это очень просто. Вот ссылка на репозиторий:

http://zbar.hg.sourceforge.net/hgweb/zbar/iphone/summary

person Matt Connolly    schedule 18.03.2013

Пришел сюда с той же проблемой после загрузки кода учебника RDC, представленного в его блоге. Очень полезный пост, но самый полезный ответ здесь был опубликован RacZo 29 марта. Я только что скачал оригинальный образ ZBarSDK-1.3.1.dmg, удалил ZBarSDK из своего проекта и заменил его оригинальным. Сделанный.

person knarf    schedule 02.09.2013

Изучаю разработку под IOS. После нескольких дней копания,

Вот руководство по установке ZBar SDK.

1. Принятый ответ правильный, но с некоторыми ограничениями. (пробовал, работает!)

2. Альтернативное решение находится здесь. (пробовал, работает!)

3. Лучше всего построить все разные архитектуры отдельно, а затем связать их с помощью lipo: Отличное решение (пробовали, блестяще!)

Некоторые чтения для понимания этих архитектур:

http://wanderingcoder.net/2010/07/19/ought-arm/

http://wanderingcoder.net/2011/09/25/compiling-armv7/

person Yang    schedule 10.12.2013