2013-04-06 17 views
5

Próbuję dołączyć najnowszą wersję OpenCV do istniejącego projektu iOS i mam błędy linkera, ponieważ mój projekt XCode jest ustawiony na używanie libstdC++, a nie wsparcie dla libC++/C++ 11.OpenCV 2.4.3+ z libstdC++ dla iOS?

Widziałem kilka innych osób, które naprawiły swoje błędy, włączając opcję libC++. Przykłady:

Jednak muszę korzystać z libstdC++ bo mam innych bibliotek 3rd party, które są już skompilowane ze starszym stdlib (nie można zmienić). Czy istnieje sposób na skompilowanie OpenCV 2.4.3+ bez opcji -stdlib = libC++? Czy są specjalne flagi do przekazania do CMake? lub do skryptu build_framework.py, który znajduje się w folderze ios kodu źródłowego OpenCV?

Czy ktoś ma wersję binarną? Wygląda na to, że wszystkie pliki do pobrania z OpenCV zakładają libC++/C++ 11.

Odpowiedz

10

W źródle dla OpenCV zlokalizować ten plik

ios/cmake/Modules/Platform/iOS.cmake 

zmienić ten wiersz:

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

do:

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

kompilacji przy użyciu skryptu Pythona

ios/build_framework.py 

Wtedy powinno być dobrze iść

Właśnie próbowałem na 2.4.3 źródła, zamienione w otrzymanej ram na istniejącym projekcie zmienił C++ biblioteki standardowej dla projektu libstdC++ i działa poprawnie.

+0

Tak! To całkiem proste rozwiązanie. Dzięki. – mikewoz

1

Pracuję również nad projektem wykorzystującym OpenCV i bibliotekę 3rd party, która wymaga libstdC++.

Gdy sam wpadłem na ten problem, chciałem podzielić się tym, co dla mnie zadziałało.


Udało mi się uzyskać działanie OpenCV przez dodanie "libC++. Dylib" do mojego projektu.

Zbuduj Fazy -> "Link Binary z bibliotek" -> "+" -> libC++ dylib

Dla odniesienia używam OpenCV 2.4.9 (OpenCV-2.4.9) z opencv.org.. Skompilowałem go za pomocą platformy ios build_framework.py zgodnie z instrukcjami w dokumentach OpenCV. Bez modyfikacji.