如何在iOS上构建OpenCV 2.4.9?

7
我正在遵循这些说明(OpenCV文档),但它们非常过时:提及iOS4或iOS5,安装在/Developer的XCode 4.2等等。
它无法构建,我有各种错误:
所有初始测试都失败:--执行测试HAVE_CXX_W - 失败 另外:
-- 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

配置看起来是正确的:
-- 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

但是后来,我出现了第一个链接错误: /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 我的系统缺少什么来编译OpenCV适用于iOS?

我刚刚成功地构建了2.4.8版本(来自2013年12月27日),没有遇到任何问题。请注意,这是最新的已标记版本。我认为标题中的2.4.9可能来自于混淆的配置输出。在下面的详细信息中,它将自己标识为基于2.4.5版本的修订版,考虑到提问时期,这可能更准确。 - febeling
2个回答

20
根据3rdParty/libjpeg/CMakeLists.txt文件的第12行,jmemansi.c被排除在构建范围之外。
if(ANDROID OR IOS)
  ocv_list_filterout(lib_srcs jmemansi.c)
else()
  ocv_list_filterout(lib_srcs jmemnobs.c)
endif()

然而,在world模块构建中,相应的目标文件并没有从链接器输入中排除。这可以通过从链接器输入中过滤掉jmemansi.o来修复:

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()

1

不要使用官方网站上给出的opencv安装指南中的终端命令,使用以下命令即可。对我很有效。

cd OpenCV-2.3.1

mkdir build

cd build

cmake -G "Unix Makefiles" ..

make

sudo make install


这适用于iOS吗?它会创建.framework文件吗?参考此问题:http://stackoverflow.com/questions/23131249/compiling-opencv-for-ios-fails-cmake-fails - vatti

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接