如何为iOS构建OpenCV 2.4.9?
我遵循这些属于openCV文档的内容,但它们确实过时了:提到了iOS4或iOS5,在/Developer中安装了XCode 4.2,等等 它无法生成,我有各种错误: 所有初始测试均失败:--如何为iOS构建OpenCV 2.4.9?,ios,opencv,compiler-errors,Ios,Opencv,Compiler Errors,我遵循这些属于openCV文档的内容,但它们确实过时了:提到了iOS4或iOS5,在/Developer中安装了XCode 4.2,等等 它无法生成,我有各种错误: 所有初始测试均失败:--执行测试时有\u CXX\u W-失败 此外: 配置看起来正确: -- General configuration for OpenCV 2.4.9 ===================================== -- Version control: 2.4.5-
执行测试时有\u CXX\u W-失败
此外:
配置看起来正确:
-- 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:无法打开文件:/Users/ant/Xcode/opencv/ios/build/iPhoneOS-armv7/3rdparty/libjpeg/opencv.build/Release iPhoneOS/libjpeg.build/Objects normal/armv7/jmensi.o
我的系统在为iOS编译OpenCV时缺少了什么?根据第三方/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 module build中,链接器输入不会排除相应的对象文件。这可以通过从链接器输入中过滤掉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()
宏(ios包含第三方库)
foreach(l${ARGN})
添加依赖项(${the_module}${l})
字符串(正则表达式替换“${l}”objpath1“${CMAKE_BINARY_DIR}/3rdparty/${l}/${objpath0}”)
文件(GLOB sources${CMAKE_SOURCE_DIR}/3rdparty/${l}/*.c)
foreach(srcname${sources})
if(是绝对的“${srcname}”)
文件(相对路径srcname“${CMAKE\u SOURCE\u DIR}/3rdparty/${l}”“${srcname}”)
endif()
字符串(替换“.”“\uuuuuSRCNAME”${srcname}”)
获取\u文件名\u组件(srcname\u we${srcname}NAME\u we)
字符串(正则表达式替换“${srcname_we}”objpath2“${objpath1}”)
字符串(正则表达式替换“${srcname}”objpath3“${objpath2}”)
列表(追加objlist“\”${objpath3}\”)
endforeach()#(srcname${sources})
endforeach()
ocv_list_filterout(objlist jmenasi)#使用以下命令,而不是使用官方网站的opencv安装指南中给出的终端命令。为我工作
cd OpenCV-2.3.1
mkdir构建
光盘制作
cmake-G“Unix生成文件”
制造
sudo make install我刚刚能够毫无困难地构建2.4.8(从2013年12月27日开始)。请注意,这是标记的最新版本。我认为标题中的2.4.9来自混乱的配置输出。在下面的细节中,它将自己标识为基于2.4.5的修订版,考虑到问题的时间,这可能更准确。这是否也适用于iOS?它是否创建.framework文件?关于这个问题:
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()