使用最新的开放式cv框架,我无法在IOS设备上编译代码。我正面临以下错误。
架构arm64的未定义符号: “_png_init_filter_functions_neon”,引自: opencv2中的_png_read_filter_row(pngrutil.o) ld:找不到架构arm64的符号 clang:错误:链接器命令失败,退出代码为1(使用-v查看调用)
相同的应用程序能够为模拟器编译,但不能为ios设备编译。谁能告诉我为什么我会遇到这个问题。提前致谢。
答案 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
不是为arm64
(png_init_filter_functions_neon
已定义的地方)而构建的,而是armv7
和armv7s
。从那里开始,通过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'