Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Cannot build OpenCV framework for iOS

Tags:

ios

opencv

I am having trouble building the framework.

I have cloned a copy of OpenCV from here: https://github.com/Itseez/opencv

Then checked that I have the latest cmake 2.8.10.2

Then run build_framework.py in the iOS folder.

e.g.

./opencv/ios/build_framework.py opencv-ios-build

Output from this is:

-- Setting up iPhoneOS toolchain
-- iPhoneOS toolchain loaded
-- Setting up iPhoneOS toolchain
-- iPhoneOS toolchain loaded
-- The CXX compiler identification is Clang 4.2.0
-- The C compiler identification is Clang 4.2.0
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - failed
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - failed
-- Performing Test HAVE_CXX_W
-- Performing Test HAVE_CXX_W - Failed
-- Performing Test HAVE_C_W
-- Performing Test HAVE_C_W - Failed
-- Performing Test HAVE_CXX_WALL
-- Performing Test HAVE_CXX_WALL - Failed
-- Performing Test HAVE_C_WALL
-- Performing Test HAVE_C_WALL - Failed
-- Performing Test HAVE_CXX_WERROR_RETURN_TYPE
-- Performing Test HAVE_CXX_WERROR_RETURN_TYPE - Failed
-- Performing Test HAVE_C_WERROR_RETURN_TYPE
-- Performing Test HAVE_C_WERROR_RETURN_TYPE - Failed
-- Performing Test HAVE_CXX_WERROR_NON_VIRTUAL_DTOR
-- Performing Test HAVE_CXX_WERROR_NON_VIRTUAL_DTOR - Failed
...

-- Could NOT find PythonInterp (missing:  PYTHON_EXECUTABLE) (Required is at least version "2.0")
-- Performing Test HAVE_CXX_WNO_UNDEF
-- Performing Test HAVE_CXX_WNO_UNDEF - Failed
-- Performing Test HAVE_CXX_WNO_SIGN_PROMO
-- Performing Test HAVE_CXX_WNO_SIGN_PROMO - Failed
-- Performing Test HAVE_CXX_WNO_MISSING_DECLARATIONS
-- Performing Test HAVE_CXX_WNO_MISSING_DECLARATIONS - Failed
-- Performing Test HAVE_CXX_WNO_MISSING_PROTOTYPES
-- Performing Test HAVE_CXX_WNO_MISSING_PROTOTYPES - Failed
-- Performing Test HAVE_OBJCXX_FOBJC_EXCEPTIONS
-- Performing Test HAVE_OBJCXX_FOBJC_EXCEPTIONS - Failed
-- Performing Test HAVE_CXX_WNO_DEPRECATED_DECLARATIONS
-- Performing Test HAVE_CXX_WNO_DEPRECATED_DECLARATIONS - Failed
-- 
-- General configuration for OpenCV 2.4.9 =====================================
--   Version control:               unknown
-- 
--   Platform:
--     Host:                        Darwin 12.3.0 i386
--     Target:                      iOS
--     CMake:                       2.8.10.2
--     CMake generator:             Xcode
--     CMake build tool:            /Applications/CMake 2.8-10.app/Contents/bin/cmakexbuild
--     Xcode:                       4.6.1
-- 
--   C/C++:
--     Built as dynamic libs?:      NO
--     C++ Compiler:                /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang++  (ver 4.2.0)
--     C++ flags (Release):         -stdlib=libc++ -headerpad_max_install_names -fvisibility=hidden -fvisibility-inlines-hidden -fPIC   -DNDEBUG -O3 -fomit-frame-pointer -ffast-math  -DNDEBUG
--     C++ flags (Debug):           -stdlib=libc++ -headerpad_max_install_names -fvisibility=hidden -fvisibility-inlines-hidden -fPIC   -g  -O0 -DDEBUG -D_DEBUG -ggdb3
--     C Compiler:                  /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang
--     C flags (Release):           -fPIC   -O3 -DNDEBUG  -DNDEBUG
--     C flags (Debug):             -fPIC   -g  -O0 -DDEBUG -D_DEBUG -ggdb3
--     Linker flags (Release):      
--     Linker flags (Debug):        
--     Precompiled headers:         NO
-- 
--   OpenCV modules:
--     To be built:                 core imgproc flann highgui features2d calib3d ml video objdetect contrib legacy nonfree photo softcascade stitching videostab world
--     Disabled:                    -
--     Disabled by dependency:      -
--     Unavailable:                 androidcamera gpu java ocl python superres ts
-- 
--   GUI: 
--     Cocoa:                       YES
--     OpenGL support:              NO
-- 
--   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
-- 
--   Other third-party libraries:
--     Use IPP:                     NO
--     Use Eigen:                   NO
--     Use TBB:                     NO
--     Use OpenMP:                  NO
--     Use GCD                      YES
--     Use Concurrency              NO
--     Use C=:                      NO
--     Use Cuda:                    NO
--     Use OpenCL:                  NO
-- 
--   Python:
--     Interpreter:                 NO
-- 
--   Java:
--     ant:                         NO
--     JNI:                         NO
--     Java tests:                  NO
-- 
--   Documentation:
--     Build Documentation:         NO
--     Sphinx:                      NO
--     PdfLaTeX compiler:           NO
-- 
--   Tests and samples:
--     Tests:                       NO
--     Performance tests:           NO
--     C/C++ Examples:              NO
-- 
--   Install path:                  /Users/Ants/Dev/iOS/opencv-ios-build/build/iPhoneOS-armv7/install
-- 
--   cvconfig.h is in:              /Users/Ants/Dev/iOS/opencv-ios-build/build/iPhoneOS-armv7
-- -----------------------------------------------------------------
-- 
-- Configuring done
-- Generating done
-- Build files have been written to: /Users/Ants/Dev/iOS/opencv-ios-build/build/iPhoneOS-armv7

But it does build Xcode projects.

The process continues to run the compiles but this fails on rand.cpp in the opencv core

    /Users/Ants/Dev/iOS/opencv/modules/core/src/rand.cpp:758:8: error: unknown type name 'pthread_key_t'; did you mean 'pthread_attr_t'?
static pthread_key_t tlsRNGKey = 0;
       ^~~~~~~~~~~~~
       pthread_attr_t
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS6.1.sdk/usr/include/sys/signal.h:157:34: note: 'pthread_attr_t' declared here
typedef __darwin_pthread_attr_t         pthread_attr_t;
                                        ^
/Users/Ants/Dev/iOS/opencv/modules/core/src/rand.cpp:758:22: error: no viable conversion from 'int' to 'pthread_attr_t' (aka '_opaque_pthread_attr_t')
static pthread_key_t tlsRNGKey = 0;
                     ^           ~
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS6.1.sdk/usr/include/sys/_types.h:64:8: note: candidate constructor (the implicit copy constructor) not viable: no known conversion from 'int' to 'const _opaque_pthread_attr_t &' for 1st argument
struct _opaque_pthread_attr_t { long __sig; char __opaque[__PTHREAD_ATTR_SIZE__]; };
       ^
/Users/Ants/Dev/iOS/opencv/modules/core/src/rand.cpp:759:8: error: unknown type name 'pthread_once_t'; did you mean 'pthread_attr_t'?
static pthread_once_t tlsRNGKeyOnce = PTHREAD_ONCE_INIT;
       ^~~~~~~~~~~~~~
       pthread_attr_t
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS6.1.sdk/usr/include/sys/signal.h:157:34: note: 'pthread_attr_t' declared here
typedef __darwin_pthread_attr_t         pthread_attr_t;
                                        ^
/Users/Ants/Dev/iOS/opencv/modules/core/src/rand.cpp:759:39: error: use of undeclared identifier 'PTHREAD_ONCE_INIT'
static pthread_once_t tlsRNGKeyOnce = PTHREAD_ONCE_INIT;
                                      ^
/Users/Ants/Dev/iOS/opencv/modules/core/src/rand.cpp:774:5: error: use of undeclared identifier 'pthread_once'
    pthread_once(&tlsRNGKeyOnce, makeRNGKey);
    ^
5 errors generated.

Any ideas?

like image 631
Ants Avatar asked Nov 03 '22 00:11

Ants


1 Answers

The clue is in the line:

-- Could NOT find PythonInterp (missing: PYTHON_EXECUTABLE) (Required is at least version "2.0")

I worked around this by editing the build_framework.py file, adding the path to python in to the cmakeargs section (circa line 39):

cmakeargs = ("-GXcode " +
             "-DPYTHON_EXECUTABLE=/usr/bin/python " +
             "-DCMAKE_BUILD_TYPE=Release " +
             "-DCMAKE_TOOLCHAIN_FILE=%s/ios/cmake/Toolchains/Toolchain-%s_Xcode.cmake" +
             "-DBUILD_opencv_world=ON " +
             "-DCMAKE_INSTALL_PREFIX=install") % (srcroot, target)

Alternatively (and it is way faster than compiling from scratch) use cocoapods to install the dependency instead.

like image 193
Samscam Avatar answered Nov 15 '22 06:11

Samscam