Подтвердить что ты не робот

Zxing в xcode 4.5 и ios 6

Как многие из вас заметили; zxing не работает в последнем коде xcode (4.5/ios 6)

Вот пример использования:

  • проверить последнюю версию с внешней стороны (поскольку некоторые исправления уже были добавлены)
  • создать приложение с одним представлением в xcode 4.5 с ios 6.0
  • используйте README для добавления зависимостей, путей и т.д. (просто следуйте шаг за шагом)
  • добавить вызов zxingcontroller в класс (переименованный в мм)

Ошибка компиляции как для симулятора, так и для устройства Он показывает 31 ошибку, подобную этой:

Undefined symbols for architecture i386:
  "std::string::c_str() const", referenced from

все 31 ошибка аналогична, разница в имени символов

Может кто-нибудь знает, как его решить в этом случае?

p.s. если у вас есть приложение из предыдущего Xcode, оно работает. Проблема заключается только в том, что вы создаете новое приложение в Xcode 4.5

4b9b3361

Ответ 1

Проблема, с которой вы столкнулись, похоже, связана с стандартной библиотекой С++.

Собственно, всякий раз, когда вы видите ошибки компоновщика в отношении со стандартными библиотечными объектами (например, std::string), вы должны проверить настройки проекта во всех связанных библиотеках и самом проекте-проекте. Они обычно должны соответствовать!

Оригинальный ScanTest (который создает ZXingWidget в качестве подпроекта) использует следующие параметры, и они должны соответствовать вашим настройкам сборки приложения, если вы используете библиотеку как есть.

Чтобы убедиться, я создал совершенно новый проект, используя Xcode 4.5. Этот проект использует ZXingWidget как готовую библиотеку, но не как подпроект - мне не нравятся подпроекты для вещей, которые не являются моими собственными, хотя эта специальность не влияет на результаты.

Важная настройка Стандартная библиотека С++ - убедитесь, что она установлена ​​в положение Компилятор по умолчанию

enter image description here


Небольшое пояснение

На самом деле вам не нужно использовать Стандартную библиотеку С++, вы также можете использовать стандартную библиотеку LLVM С++ с поддержкой С++ 11. Но вам придется использовать эту ту же библиотеку во всех проектах, подпроектах и ​​библиотеках, которые связаны с вашим проектом. Поэтому, если вы настаиваете на использовании более поздней версии этой библиотеки (поддержка С++ 11), вам также придется создавать библиотеку ZXing с этими настройками.


И последнее, но не менее важное: убедитесь, что параметры Архитектуры и Действительная архитектура соответствуют всем проектам и подпроектам (исправление общей проблемы с компоновщиком armv7s).

Во-первых, убедитесь, что для параметра Архитектуры установлено значение armv7 armv7s во всех проектах. Затем также отредактируйте настройки проекта для всех проектов в Действительной архитектуре armv7s armv7.

enter image description here

Ответ 2

Возможно, вы также захотите переключить "Другой предупредительный флаг" -Werror off. Кажется, это необходимо в версиях Xcode > 4.5 (компилятор LLVM > 4.1).

Ответ 3

Он работает для меня, включил ли вы -lstdС++ в свой список других флагов компоновщика на вкладке "Настройки сборки" целевой страницы проекта? Похоже, что он не распознает символы С++, необходимые для создания zXing. Если это так, то приведенный выше совет должен помочь.