如何为iOS7编译OpenCV(arm64)

时间:2013-09-24 08:49:15

标签: python ios opencv ios7

编译Xcode项目失败,并出现以下错误: 'missing required architecture arm64 in file /Users/*/Git/ocr/opencv2.framework/opencv2'

如果我将架构(在Build Settings下)更改为(armv7,armv7s)而不是(armv7,armv7s),它运行良好。

如何更改opencv python构建脚本,为opencv2.framework添加arm64支持?

8 个答案:

答案 0 :(得分:8)

最新的OpenCV iOS框架默认支持64位

可以从以下网址下载:OpenCV download page

答案 1 :(得分:4)

我修改了以下内容以使其构建,但我目前尚未安装arm64 iOS设备。

修改:我还必须关注https://stackoverflow.com/a/17025423/1094400

假设“opencv”是包含来自Github的opencv源的文件夹:

位于gzlib.c, gzread.c, gzwrite.c的每个opencv/3rdparty/zlib/中的

添加:

#include <unistd.h>

在现有包含之后的顶部。

另外打开opencv/platforms/ios/cmake/Modules/Platform/iOS.cmake并从以下位置更改第88行:

set (CMAKE_OSX_ARCHITECTURES "$(ARCHS_STANDARD_32_BIT)" CACHE string  "Build architecture for iOS")

为:

set (CMAKE_OSX_ARCHITECTURES "$(ARCHS_STANDARD_INCLUDING_64_BIT)" CACHE string  "Build architecture for iOS")

此外,更改第99行和第100行opencv/platforms/ios/build_framework.py处的编译:

targets = ["iPhoneOS", "iPhoneOS", "iPhoneSimulator"]
archs = ["armv7", "armv7s", "i386"]

为:

targets = ["iPhoneOS", "iPhoneOS", "iPhoneOS", "iPhoneSimulator", "iPhoneSimulator"]
archs = ["armv7", "armv7s", "arm64", "i386", "x86_64"]

生成的库将包含以下内容:

$ xcrun -sdk iphoneos lipo -info opencv2
    Architectures in the fat file: opencv2 are: armv7 armv7s i386 x86_64 arm64

虽然我仍然关注opencv/platforms/ios/cmake/Toolchain-iPhoneOS_Xcode.cmake,它将第14行和第17行中数据指针的大小定义为4。 我想64bit应该是8,因为我没有测试编译的库是否适用于arm64,如果它运行不正常,我建议进一步调查。

答案 2 :(得分:2)

micahp的答案几乎是完美的,但错过了模拟器版本。因此,将platforms / ios / build_framework.py修改为:

targets = ["iPhoneOS", "iPhoneOS", "iPhoneOS", "iPhoneSimulator", "iPhoneSimulator"]
archs = ["armv7", "armv7s", "arm64", "i386", "x86_64"]

您需要下载Xcode 5.0.1的命令行工具,然后运行

python opencv/platforms/ios/build_framework.py ios

答案 3 :(得分:0)

尝试等下个月。将发布一个新的XCode,具有更强大的32/64位支持。

https://developer.apple.com/news/index.php?id=9162013a

答案 4 :(得分:0)

将“build_frameworks.py”修改为:

def build_framework(srcroot, dstroot):
    "main function to do all the work"

    targets = ["iPhoneOS", "iPhoneOS", "iPhoneOS", "iPhoneSimulator"]
    archs = ["armv7", "armv7s", "arm64", "i386"]
    for i in range(len(targets)):
        build_opencv(srcroot, os.path.join(dstroot, "build"), targets[i], archs[i])

    put_framework_together(srcroot, dstroot)

答案 5 :(得分:0)

@Jan,我按照你的指示,但OpenCV仍然不能在arm64上运行。你做了如此详细而精彩的回答 - 为什么不在模拟器上查看它,看看你是否可以让它运行? : - )

FWIW,我认为它可能比看起来更难。在openCV stackoverflow克隆上,有迹象表明此问题可能是non-trivial

答案 6 :(得分:0)

请使用以下命令,而不是使用官方网站的opencv安装指南中给出的终端命令。为我工作。

cd OpenCV-2.3.1

mkdir build

cd build

cmake -G“Unix Makefiles”..

sudo make install

答案 7 :(得分:0)

我遇到了类似的错误,但问题与arm64 coompilation.fixed无关。添加框架libc ++。dylib