[英]Error while compiling iOS app with openCV framework on real device
使用最新的開放式cv框架,我無法在IOS設備上編譯代碼。 我面臨以下錯誤。
體系結構arm64的未定義符號:“ _ png_init_filter_functions_neon”,引用自:opencv2(pngrutil.o)中的_png_read_filter_row ld:體系結構arm64找不到符號clang:錯誤:鏈接器命令失敗,退出代碼為1(使用-v查看調用)
同一應用程序可以針對模擬器進行編譯,但不能針對ios設備進行編譯。 誰能告訴我為什么我要面對這個問題。 提前致謝。
我已經解決了這個問題。這個問題的核心是我們重新編譯了libpng中的某些內容,也許它在其他ios框架中退出了。然后發生了沖突。Opncv3.1的代碼中包含3rdparty。您應該做的是查找行117-121在libpng的pngpriv.h中,然后跟隨Iphone-device-linker錯誤 。
看來,該提交解決了該問題,同時仍然保持了對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")
診斷過程,因為它可能有用:
通過在調用python ../opencv/platforms/ios/build_framework.py ios
並挖掘輸出之前啟動script build.log
發現此問題; arm_init.c
不是為arm64
構建的(定義png_init_filter_functions_neon
地方),而是為armv7
和armv7s
。 從那里查看3rdparty/libpng/CMakeLists.txt
指向未設置的ENABLE_NEON
。
我遇到了@shahzaib描述的相同問題。 在模擬器中,它可以工作,但在iPhone中,它不能工作,並顯示相同的錯誤。
以前,我在iOS項目中手動添加了OpenCV 3.1。 后來我更改了它並通過cocoapod https://cocoapods.org/pods/OpenCV安裝了OpenCV庫
在cocoapod中有3.1.0.1版本修復了該問題。
pod 'OpenCV', '~> 3.1.0.1'
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.