无法为 iOS 构建 OpenCV 框架
Posted
技术标签:
【中文标题】无法为 iOS 构建 OpenCV 框架【英文标题】:Cannot build OpenCV framework for iOS 【发布时间】:2013-04-10 01:13:34 【问题描述】:我在构建框架时遇到问题。
我从这里克隆了一份 OpenCV:https://github.com/Itseez/opencv
然后检查我有最新的cmake 2.8.10.2
然后在 ios 文件夹中运行 build_framework.py。
例如
./opencv/ios/build_framework.py opencv-ios-build
输出如下:
-- 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
但它确实构建了 Xcode 项目。
进程继续运行编译,但在 opencv 核心中的 rand.cpp 上失败
/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.
有什么想法吗?
【问题讨论】:
顺便说一句,我可以使用 cmake 毫无问题地构建 OSX 库。 【参考方案1】:线索就在这条线上:
-- Could NOT find PythonInterp (missing: PYTHON_EXECUTABLE) (Required is at least version "2.0")
我通过编辑 build_framework.py
文件来解决这个问题,将 python 的路径添加到 cmakeargs
部分(大约第 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)
或者(它比从头编译要快得多)使用cocoapods 来安装依赖项。
【讨论】:
谢谢我会试试这个然后更新。我喜欢使用 cocoapods 的想法。以上是关于无法为 iOS 构建 OpenCV 框架的主要内容,如果未能解决你的问题,请参考以下文章
学习 opencv---(11)OpenC 边缘检测:Canny算子,Sobel算子,Laplace算子,Scharr滤波器