【问题标题】:How to compile OpenCV for iOS7 (arm64)如何为 iOS7 (arm64) 编译 OpenCV
【发布时间】:2013-09-24 08:49:15
【问题描述】:

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

如果我将架构(在构建设置下)更改为(armv7,armv7s)而不是(armv7,armv7s),它会很好地工作。

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

【问题讨论】:

  • 你最好在 OpenCV 的 StackOverflow clone 上问这个问题。通常情况下,使用 OpenCV 的案例文档非常薄。
  • 我刚刚能够构建标记版本 2.4.8,它是从 2013 年 12 月 27 日开始的,没有任何问题。 (不过,Master 失败了。)Xcode 5.0.2 和 OS X 10.9.1。

标签: python ios opencv ios7


【解决方案1】:

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

下载地址:OpenCV download page

【讨论】:

    【解决方案2】:

    我修改了以下内容以使其构建,尽管目前我还没有 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。 我猜 64 位应该是 8,所以我没有测试编译的库是否适用于 arm64,如果它不能正常运行,我建议此时进一步调查。

    【讨论】:

    • 给所有来到这里的人提个醒:OpenCV 现在默认支持 arm64,所以去下载最新的 OpenCV iOS 框架吧。
    【解决方案3】:

    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
    

    【讨论】:

    • 能否上传编译好的框架并提供链接。我仍然收到错误
    • 这仍然无法构建。 zlib 似乎无法为 64 位目标构建。 iOS 提供了 zlib,所以我不知道 OpenCV 是否可以使用它。我花了太多时间试图修改构建以使其正常工作,但我失败了。
    【解决方案4】:

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

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

    【讨论】:

      【解决方案5】:

      修改“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)
      

      【讨论】:

      • 尝试按照您的建议更改脚本,但无法构建
      【解决方案6】:

      @Jan,我按照您的指示进行操作,但 OpenCV 仍然无法在 arm64 上运行。您给出了如此详细而精彩的答案 - 为什么不在模拟器上检查一下,看看您是否可以让它运行? :-)

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

      【讨论】:

        【解决方案7】:

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

        cd OpenCV-2.3.1

        mkdir 构建

        cd 构建

        cmake -G "Unix Makefiles" ..

        制作

        sudo 安装

        【讨论】:

          【解决方案8】:

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

          【讨论】:

            猜你喜欢
            • 2018-12-21
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2014-05-07
            • 2017-12-15
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多