How to create OpenCV 2.4.9 for iOS?

I follow these instructions , which belong to the openCV document, but they are really outdated: mention iOS4 or iOS5, Xcode 4.2 installed in / Developer, etc.

It is not built, and I have various errors:

All initial tests fail: - Performing Test HAVE_CXX_W - Failed Also:

 -- Looking for fseeko -- Looking for fseeko - not found -- Looking for unistd.h -- Looking for unistd.h - not found -- Looking for sys/types.h -- Looking for sys/types.h - not found -- Looking for stdint.h -- Looking for stdint.h - not found -- Looking for stddef.h -- Looking for stddef.h - not found 

The configuration looks right:

 -- General configuration for OpenCV 2.4.9 ===================================== -- Version control: 2.4.5-1168-g0a42a3e -- -- Platform: -- Host: Darwin 12.3.0 i386 -- Target: iOS -- CMake: 2.8.10 -- CMake generator: Xcode -- CMake build tool: /opt/local/bin/cmakexbuild -- Xcode: 4.6.2 [...] -- Media I/O: -- ZLib: build (ver 1.2.7) -- JPEG: build (ver 90) -- WEBP: NO -- PNG: build (ver 1.5.12) -- TIFF: NO -- JPEG 2000: NO -- OpenEXR: NO -- -- Video I/O: -- AVFoundation: YES -- QuickTime: NO -- QTKit: YES -- V4L/V4L2: NO/NO 

But later I have this first binding error: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/libtool: can't open file: /Users/ant/xcode/opencv/ios/build/iPhoneOS-armv7/3rdparty/libjpeg/OpenCV.build/Release-iphoneos/libjpeg.build/Objects-normal/armv7/jmemansi.o

What am I missing on my system to compile OpenCV for iOS?

+7
source share
2 answers

According to 3rdParty / libjpeg / CMakeLists.txt: 12, jmemansi.c is excluded from the assembly:

 if(ANDROID OR IOS) ocv_list_filterout(lib_srcs jmemansi.c) else() ocv_list_filterout(lib_srcs jmemnobs.c) endif() 

However, in the world assembly of the module, the corresponding object file is not excluded from the linker input. This can be fixed by filtering jmemansi.o from the linker input:

modules / world / CMakeLists.txt: 84

 macro(ios_include_3party_libs) foreach(l ${ARGN}) add_dependencies(${the_module} ${l}) string(REGEX REPLACE "<MODULE_NAME>" "${l}" objpath1 "${CMAKE_BINARY_DIR}/3rdparty/${l}/${objpath0}") file(GLOB sources ${CMAKE_SOURCE_DIR}/3rdparty/${l}/*.c) foreach(srcname ${sources}) if(IS_ABSOLUTE "${srcname}") file(RELATIVE_PATH srcname "${CMAKE_SOURCE_DIR}/3rdparty/${l}" "${srcname}") endif() string(REPLACE ".." "__" srcname "${srcname}") get_filename_component(srcname_we ${srcname} NAME_WE) string(REGEX REPLACE <SRC_NAME_WE> "${srcname_we}" objpath2 "${objpath1}") string(REGEX REPLACE <RELATIVE_SRC_NAME> "${srcname}" objpath3 "${objpath2}") list(APPEND objlist "\"${objpath3}\"") endforeach() # (srcname ${sources}) endforeach() ocv_list_filterout(objlist jmemansi) # <<= dirty fix endmacro() 
+20
source

Instead of using the terminal commands specified in the opencv installation guide on the official website, use the following commands. Worked for me.

cd OpenCV-2.3.1

mkdir build

cd build

cmake -G "Unix Makefile" ..

to do

sudo make install

+1
source

All Articles