Cygwin編譯本身定義OpenCV庫報錯:opencv_contrib: LOCAL_SRC_FILES points to a missing file

今天受命幫師弟調個OpenCV4Android 識別銀行卡的程序,版本號爲OpenCV4Android2.4.9,使用方式爲前文介紹的第一種方式,即經過jni調用opencv。如雜家前文所述,配套的NDK應使用較高版本號的android-ndk-r9d。它的安裝很是easy,解壓縮後環境變量設置到Path就ok:D:\ProgramFile\android-ndk-r9d;html

但遺憾的是,相同的程序相同的配置在一臺PC上經過Cygwin編譯一切ok。但在新的一臺電腦上卻出現例如如下錯誤:linux

Android NDK:ERROR:jni/Android.mk:LOCAL_SRC_FILES points to a missing file
Android NDK:Check that ././../libs/armeabi-v7a/libopencv_contrib.a exists or that its path is correct
/cygdrive/d/ProgramFiles/android-ndk-r9d/build/core/prebuilt-library.mk:45***Android NDK:Aborting.中止

android

說是mk文件中LOCAL_SRC_FILES指向的有找不到的文件,但其實mk裏配置一切正常。最讓人無語的是說libopencv_contrib.a exists or that its path is correct,好好的怎麼就牽涉到libopencv_contrib.a了,而且這個文件是必定存在的。windows

    通過研究,連接:http://zhidao.baidu.com/link?url=Fv_nHirMNwBRqeFAtfM-gQWSBFVXcpUhOfvnv_Ry5m_y1dMRA7kTUMOldb2GAQgcAxzUKQVRRBlbg8nx922cbLDBD8DC9kPXSqQT293FUQa 也是遇到的相同的問題。另外,國外的http://stackoverflow.com/questions/20014555/fail-to-build-opencv也是相同的問題,此連接說:ide

Error clearly show libopencv_contrib.a file is missing. NDK looking at /cygdrive/c/android-ndk-r9b/toolchains/arm-linux-androideabi-4.6/prebuilt/windows-x86_64/user/libs/armeabi-v7a/ location, But file not found. You can do is either include above path in library search path for example: LD_LIBRARY_PATH in Linux or %PATH% in windows. OR you can copy libopencv_contrib.a file to that location. My suggestion would be include library path.ui

libopencv_contrib.a這個文件不存在,一切都是因爲找不到此庫引發的。看着很是有道理,順着這個思路摸索了兩個小時無解,根本就是扯淡啊。最後雜家計上心來,不是說NDK自r7以後都可以不用Cygwin了,雜家在前文裏也有介紹配置方法,就是把NDK安裝文件夾下的ndk-build.cmd在Eclipse裏新建一個Builder而後連接進去。當時認爲不太好用,主要是什麼時候編譯不受控制。但經過今天,感受此種配置方法帶來的開發體驗遠遠超過Cygwin啊!經過此方法,完美攻克了opencv_contrib: LOCAL_SRC_FILES points to a missing file這個錯誤。如下附上具體說明:url

一、選中帶jni的project,按下alt+enter鍵,左側欄找到Builders,而後點new,選擇Program點ok。idea




二、以後就是設置這個新建的Builder,名字命爲NDK_Builder.在Location裏將ndk-builder.cmd的路徑填進去:D:\ProgramFile\android-ndk-r9d\ndk-build.cmdspa

在Working Directory裏就選擇當前這個project,表示NDK_Builder僅僅在當前project有效。選中後,本身主動會填寫:${workspace_loc:/ScanBankCard}.net


三、在Refresh欄,選擇第三個。


四、在Build Options裏,選擇After a 「Clean」、During manual builds,During auto builds這個選項最好不要選,不然的話在jni裏寫一句話保存一下,就本身主動編譯一次,這個不太友好。僅僅選擇文中的兩項就ok了,想要編譯so的話點clean project或者手動編譯就能夠。





備註:有時候更改了jni裏的c代碼,必定要clean一下整個project,不然有可能編譯不進去

官方關於NDK和OpenCV4Android配置的指導文檔在這裏:http://docs.opencv.org/doc/tutorials/introduction/android_binary_package/android_binary_package_using_with_NDK.html 可以參考下。

備註:

一、官方文檔裏配置了Refresh欄的libs文件夾,這個不配置也ok。

二、我以前的博客裏說不能配置Cygwin的路徑D:\ProgramFile\cgwin\bin;到Path裏,看來是錯誤的。這個必須要配置。可以在個人電腦環境變量裏配,也可以參考官方的文檔在新建的Builder的第三個設置欄Environment里加入。

三、雖然如此,Cygwin仍是值得一裝的,有時用它的grep命令搜索一些信息很是方便,尤爲看第三方代碼時。

歡迎加入OpenCV4Android聯盟QQ羣:66320324      備註:yanzi

------------------------本文系原創,轉載註明做者yanzi1225627 

相關文章
相關標籤/搜索