OpenCV 2.4.3+ с libstdC++ для iOS?

Я пытаюсь включить последнюю версию OpenCV в существующий проект iOS, и у меня возникают ошибки компоновщика, потому что мой проект XCode настроен на использование libstdC++, а не на поддержку libC++ / C++11.

Я видел несколько других людей, которые исправили свои ошибки, включив libC++. Примеры:

Однако мне НУЖНО использовать libstdC++, потому что у меня есть другие сторонние библиотеки, которые уже скомпилированы с более старой версией stdlib (не может быть изменена). Есть ли способ скомпилировать OpenCV 2.4.3+ без -stdlib=libC++? Существуют ли специальные флаги для передачи в CMake? или к сценарию build_framework.py, который находится в папке ios исходного кода OpenCV?

Или у кого-нибудь есть бинарная версия? Кажется, все загружаемые из OpenCV предполагают libC++ / C++11.

2 ответа

Решение

В источнике для openCV найдите этот файл:

ios/cmake/Modules/Platform/iOS.cmake

Измените эту строку:

set (CMAKE_CXX_FLAGS "-stdlib=libc++ -headerpad_max_install_names -fvisibility=hidden -fvisibility-inlines-hidden")

чтобы:

set (CMAKE_CXX_FLAGS "-stdlib=libstdc++ -headerpad_max_install_names -fvisibility=hidden -fvisibility-inlines-hidden")

Компиляция с использованием скрипта Python

ios/build_framework.py

Тогда тебе должно быть хорошо идти

Я только что попробовал это на источнике 2.4.3, поменялся местами в результирующей платформе существующего проекта, изменил стандартную библиотеку C++ для проекта на libstdC++, и он работает нормально.

Я также работаю над проектом с использованием OpenCV и сторонней библиотеки, которая требует libstdC++.

Поскольку я сам столкнулся с этой проблемой, я хотел поделиться тем, что сработало для меня.


Я смог заставить OpenCV работать, добавив "libC++. Dylib" в мой проект.

Этапы сборки -> "Связать двоичные файлы с библиотеками" -> "+" -> libC++. Dylib

Для справки я использую OpenCV 2.4.9 (opencv-2.4.9) с opencv.org. Я скомпилировал его, используя платформу ios build_framework.py в соответствии с инструкциями в документации OpenCV. Никаких изменений не требуется.

Другие вопросы по тегам