Как собрать ZBar SDK с проектом вместо использования статической библиотеки?

Я создаю проект сканера кода для iOS, используя ZBar SDK. Я пытаюсь построить свой проект непосредственно из исходного кода ZBar, а не включать статическую библиотеку libzbar.a.

Я скачал исходный код ZBar, который включает проект XCode для сборки libzbar.a. Я попытался скопировать все исходные файлы из проекта, но это не сработало. Я продолжаю получать ошибки неопределенного символа.

Какие исходные файлы должны быть включены, учитывая, что мне нужно поддерживать только iOS?

Следует ли строго соблюдать структуру папок при сборке проекта?

Будут ли нужны какие-либо настройки сборки, если я напрямую включу исходные файлы?

EDIT: я следовал той же структуре папок и настройкам сборки, что и в проекте XCode для libzbar. Мне удалось собрать библиотеку, но при связывании она все еще не работает. Я получаю сообщение об ошибке: ld: duplicate symbol _OBJC_METACLASS для всех исходных файлов. Я дважды проверил, в проекте нет ссылок на исходную статическую библиотеку libzbar.a или более одного экземпляра этих исходных файлов. Если я удалю для них ссылки, проект будет строиться нормально, но затем произойдет сбой всякий раз, когда ссылаются на любой символ из библиотеки. Я думаю, что я все еще что-то упускаю!!


person Vin    schedule 25.03.2012    source источник
comment
ZBar — это проект с открытым исходным кодом, распространяемый как статическая библиотека только для облегчения интеграции, а не потому, что разработчики не хотят, чтобы люди видели исходный код. На самом деле, если вы зайдете на сайт проекта, ссылка для загрузки исходного кода будет чуть ниже ссылки для загрузки статической библиотеки.   -  person Vin    schedule 25.03.2012
comment
@rakeshNS все ошибки связаны либо с отсутствием файлов заголовков, либо с неопределенными символами.   -  person Vin    schedule 25.03.2012


Ответы (3)


Я решил эту проблему наконец. Вот шаги, которые я сделал:

1) Скопировал исходные файлы проекта в свой проект.

2) Удалена зависимость libzbar.a от моего проекта.

3) В настройку сборки Header Search Paths проекта добавлен путь к папке, содержащей исходники и заголовки.

4) В проект добавлен следующий пользовательский параметр сборки:

EXCLUDE_SOURCE_FILE_NAMES
GCC_MODEL_TUNING
PRBINDING и
USE_HEADERMAP

person Vin    schedule 30.03.2012
comment
Где вы скачали исходный код? какие классы мне нужно включить? - person Dejell; 21.03.2013
comment
@Odelya, исходный код доступен по адресу sourceforge.net/projects/zbar. Я включил все классы из исходного кода. - person Vin; 21.03.2013
comment
@Vin Можете ли вы предоставить более подробную информацию о 3) и 4) шаге или снимке экрана или что-то, что может помочь мне понять, поскольку я новичок в iOS - person Renascent; 11.10.2020

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

После загрузки zip-файла из репозитория Mercurial по умолчанию и открытия файла в xCode щелкните часть «EmbedReader» в раскрывающемся списке выбора цели и переключитесь на «zBarSDK».

Как только вы переключитесь на zBarSDK, просто выполните сборку из меню продукта, и у вас должен быть файл статической библиотеки....

person Lefteris    schedule 25.03.2012
comment
Спасибо за ваш ответ, Лефтерис, но эта часть совершенно очевидна. Я планирую внести некоторые серьезные изменения в код и хочу, чтобы в будущем этот код легко поддерживался другими разработчиками. Изменение кода непосредственно в проекте, если возникнет такая необходимость, мне кажется лучшим вариантом, чем открывать отдельный проект, вносить изменения, компилировать библиотеку и снова включать в основной проект. - person Vin; 25.03.2012

Раньше я использовал библиотеку ZXing, и она хорошо интегрировалась. Он был включен как проект, и основной проект имеет целевую зависимость для его сборки перед основным проектом. Я отредактировал его исходники под свои нужды, и у меня нет проблем с ним.

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

person Alivig    schedule 29.03.2012
comment
Спасибо за ответ, Alivig, но как-то zxing не подходит под мои требования. Я должен использовать только zbar. - person Vin; 29.03.2012