Ошибка компоновщика в Xcode 5 для libzbar.a

После того, как я интегрирую ZBar Sdk в свой проект, мой xcode 5-DP начинает показывать следующее предупреждение:

"ld: предупреждение: связывание ObjC для симулятора iOS, но объектный файл (/Documents/Projects/Project/Utility/ZBarSDK/libzbar.a(ZBarReaderViewController.o)) был скомпилирован для MacOSX"


person Pankti Patel    schedule 11.09.2013    source источник
comment
Выберите файл проекта и перейдите к этапам сборки --> выберите скомпилированные источники, затем проверьте наличие ZBarReaderViewController.m или нет? Если нет, значит, нажмите знак + и добавьте файл   -  person Arun    schedule 11.09.2013
comment
@Spynet Не могли бы вы объяснить вкратце?   -  person Pankti Patel    schedule 11.09.2013
comment
@Spynet, спасибо за ответ. Но поскольку я использую Zbar Sdk, нет доступных файлов .m.   -  person Pankti Patel    schedule 11.09.2013
comment
Выберите файл проекта и перейдите к этапам сборки --> выберите связанные двоичные файлы, затем проверьте, доступен ли libzbar.a или нет?   -  person Arun    schedule 11.09.2013
comment
Добавил, но улучшений не нашел. Все равно получил предупреждение!!!! Также я обнаружил, что это предупреждение я получил только в xcode 5.   -  person Pankti Patel    schedule 11.09.2013
comment
@PanktiPatel, вы должны отметить ответ Марио как правильный.   -  person MrTristan    schedule 10.12.2013


Ответы (4)


Создание библиотеки ZBar

Когда-то у меня была другая проблема с ZBar, и я нашел здесь полезный набор инструкций: https://web.archive.org/web/20170128181158/http://www.federicocappelli.net/2012./10/05/zbar-library-for-iphone-5-armv7s/

По сути, в инструкциях рассказывается, как проверить исходный код с помощью Mercurial, а затем скомпилировать собственный файл libzbar.a. Это должно решить вашу проблему.

Буквально вчера вечером мне пришлось снова следовать инструкциям, потому что моя версия ZBar не запустилась после обновления до Xcode 5. Я призываю вас перейти по ссылке выше, но я собираюсь в основном написать ее. здесь, наряду с некоторыми шагами, которые я добавил для новой платформы iPhone.

Загрузите и установите Mercurial для Mac. Взял последнюю для OS X 10.8. (На экране установки, когда вы запускаете программу установки, кажется, все еще написано 10.7, так что не удивляйтесь.)

После установки Mercurial загрузите исходный код ZBar с помощью следующих команд:

    hg clone http://zbar.hg.sourceforge.net:8000/hgroot/zbar/zbar 
    cd zbar 
    hg checkout iPhoneSDK-1.3.1 
    open iphone/zbar.xcodeproj 

В меню Xcode выберите «Продукт > Схема > libzbar», а затем выберите «Продукт > Схема > Редактировать схему…». (Вы получите предупреждение о том, что проект был обновлен для использования отладчика LLBD. Ура!)

Шаг 1: Изменить схему

Выберите «Выполнить» в конфигурации сборки и нажмите «ОК».

Далее мы собираемся скомпилировать libzbar как для устройства, так и для симулятора. В списке Project and Targets выберите цель libzbar и перейдите на вкладку Build Settings. Проверьте настройки вашей архитектуры, как показано на скриншоте. (Убедитесь, что там написано iOS и arm64 armv7 armv7s.)

Кроме того, не забудьте изменить Архитектуры на Стандартные архитектуры (armv7, armv7s, arm64), иначе ваш проект не будет компилироваться с помощью arm64. (Это неправильно показано на скриншоте)

Шаг 2. Настройка архитектуры

Теперь, вот часть, которую я обнаружил прошлой ночью. Моя цель развертывания была установлена ​​​​на iOS 3.1. Вы получите сообщение об ошибке, если попытаетесь скомпилировать Xcode 5 с этим параметром. Я изменил его на iOS 7.0.

Шаг 3. Настройка цели развертывания

После проверки настроек и внесения необходимых изменений запустите Build. Вернитесь в «Продукт > Схема > Редактировать схему…» и проверьте раскрывающееся меню «Назначение». (См. скриншот выше.) У меня был свой на iPhone Retina (3,5 дюйма). Измените его на устройство iOS и запустите сборку во второй раз. Теперь вы создали библиотеку дважды: один раз для симулятора и один раз для устройства. Вам нужно будет объединить две библиотеки. Перейдите в следующий каталог в Терминале:

    cd ~/Library/Developer/Xcode/DerivedData

Там есть куча каталогов с загадочными именами, один из которых будет начинаться с «zbar». Вот мой полный путь, например:

    /Users/mario/Library/Developer/Xcode/DerivedData/zbar-dwpkaidpztsnjafveraeowkkjvdo

Перейдите в этот каталог zbar, а затем перейдите в каталог Build/Products.

    cd Build
    cd Products

Там вы увидите две папки: Release-iphoneos и Release-iphonesimulator. (Внутри каждого находится файл lizbar.a.) Объедините их с помощью следующей команды:

    lipo -create Release-iphoneos/libzbar.a Release-iphonesimulator/libzbar.a -o libzbar.a 

Теперь вы создали универсальную библиотеку (libzbar.a), которую вы должны использовать, заменив ту, что была в вашем дистрибутиве ZBar. Он находится в том же каталоге Build/Product.

Как я уже сказал, я в значительной степени скопировал инструкции автора ссылки выше, г-на Каппелли, обновив их для последней версии Xcode.

person Mario    schedule 21.09.2013
comment
Фантастическая запись. Спасибо! - person LJ Wilson; 10.10.2013
comment
Изменит ли что-нибудь выбор iOS 6 в качестве цели развертывания? Я не уверен, означает ли это, что мне нужен SDK iOS7 для его сборки или что я могу использовать его только на устройствах iOS7. - person Pochi; 13.11.2013
comment
отличная работа по сжатию вещей ... одна вещь, которая заставила меня нервничать, - это компиляция этой библиотеки из последней версии ... я не думаю, что я был в последней версии, поэтому мне пришлось пройти через все и обновить файлы заголовков, которые находятся в моем проекте в в дополнение к замене скомпилированной библиотеки. - person MrTristan; 02.12.2013
comment
Я также должен был убедиться, что в моем проекте используются обновленные заголовочные файлы. Это очень хороший момент. - person Mario; 03.12.2013
comment
ты действительно спас меня.. :P - person Nirav Dangi; 13.05.2015
comment
Для меня xcode 6 не видел мой ZBarSDK.h, пока я не выполнил ваши шаги по компиляции правильной библиотеки. Однако в моей папке производных данных я не получил Release-iphoneos/libzbar.a, но получил Debug-iphoneos/libzbar.a. Я только что скомпилировал эти два и добавил их обратно в проект, а также заголовки из zbar 1.3.1. Можно ли это сделать› - person stackOverFlew; 15.07.2015
comment
Я давно не разрабатывал для iOS, поэтому я не в курсе последних новостей. Я думаю, ты должен быть в порядке, но ты должен попытаться выяснить, что произошло. Я предполагаю, что кто-то где-то писал о создании библиотек в Xcode и этой проблеме отладки/выпуска. Удачи! - person Mario; 15.07.2015

С декабря 2014 года есть более простое решение, чем ответ Марио. Используйте CocoaPods и добавьте эту строку в свой подфайл:

pod 'ZBarSDK', '~> 1.3.1'

Затем запустите классический pod install. Построится нормально, в том числе и для арм64.

person Cœur    schedule 18.03.2018

Я обошел ошибку, изменив «Создать только активную архитектуру» на ДА, не только для отладки, но и для выпуска... По крайней мере, на данный момент это спасло меня.

person almirb    schedule 10.04.2014

ZBarSDK-1.3.1 BETA устраняет проблему без пересборки.

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

person crubio    schedule 07.10.2013