簡體   English   中英

在真實設備上使用openCV框架編譯iOS應用時出錯

[英]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地方),而是為armv7armv7s 從那里查看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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM