在真实设备上使用openCV框架编译iOS应用程序时出错

时间:2016-02-11 11:49:57

标签: ios opencv compiler-errors

使用最新的开放式cv框架,我无法在IOS设备上编译代码。我正面临以下错误。

  

架构arm64的未定义符号:     “_png_init_filter_functions_neon”,引自:         opencv2中的_png_read_filter_row(pngrutil.o)   ld:找不到架构arm64的符号   clang:错误:链接器命令失败,退出代码为1(使用-v查看调用)

相同的应用程序能够为模拟器编译,但不能为ios设备编译。谁能告诉我为什么我会遇到这个问题。提前致谢。

3 个答案:

答案 0 :(得分:2)

我已经解决了这个问题。这个问题的核心是我们在libpng中重新编译了一些内容,也许它会在其他ios框架中退出。然后就会发生冲突.Opncv 3.1中有第三方代码。什么你应该做的是在libpng的pngpriv.h中找到第117-121行。然后按照Iphone - device - linker error

答案 1 :(得分:2)

这个提交似乎解决了这个问题,同时仍然保留了对iOS设备的NEON支持:

https://github.com/opencv/opencv/commit/262a52f3063c50fbb1236e2cba2bd3c68f9979bb

基本上,将-DENABLE_NEON=ON附加到cmake行的子句仅适用于以"armv"开头的架构(​​请注意“v”);上面的提交更改opencv/platforms/ios/build_framework.py以允许cmake命令也与"arm64"一起使用。

在:

    if arch.startswith("armv"):
        cmakecmd.append("-DENABLE_NEON=ON")

后:

    if arch.startswith("armv") or arch.startswith("arm64"):
        cmakecmd.append("-DENABLE_NEON=ON")

诊断过程,因为它可能有用:

通过在调用script build.log之前启动python ../opencv/platforms/ios/build_framework.py ios并挖掘输出来找到它; arm_init.c不是为arm64png_init_filter_functions_neon已定义的地方)而构建的,而是armv7armv7s。从那里开始,通过3rdparty/libpng/CMakeLists.txt查看ENABLE_NEON没有设置。

答案 2 :(得分:1)

我遇到了和@shahzaib描述的相同的问题。在模拟器中它可以工作,但在iPhone中它不工作并显示相同的错误。

以前我在iOS项目中手动添加了OpenCV 3.1。后来我更改了它并通过cocoapod https://cocoapods.org/pods/OpenCV

安装了OpenCV库

在cocoapod中有3.1.0.1版本修复了这个问题。

  pod 'OpenCV', '~> 3.1.0.1'