Android(OpenCV) NDK開發: 0xdeadbaad(code=1)錯誤 及 關閉armeabi和libnative_camera_r2.2.2.so的生成

        一、OpenCV移植到android之後,開發中遇到錯誤:android fatal signal 11(SIGSEGV) at 0xdeadbaad (code=1).很是糾結,  有的人說是程序中使用AsyncTask的問題,碰巧我程序裡還真使用瞭。但經過仔細研究發現,如果報錯:android fatal signal 11(SIGSEGV) at 0xdeadbaad (code=1).最先排查的還是本地C/C++代碼的錯誤。 原來是opencv運算時矩陣維數錯誤的原因,導致程序奔潰。

       二、原先Application.mk文件裡APP_ABI=armeabi armeabi-v7a,所以生成的libs文件夾裡總有兩套這種東西。經查,armeabi是指的該so庫用於Arm的通用CPU,而v7a的CPU支持硬件浮點運算。因此armeabi通用性強,但速度慢,而v7a能充分發揮v7a CPU的能力。華為U9200cpu型號是OMAP4660,是A9的。查瞭半天也沒看出來究竟支不支持硬件浮點運算。將armeabi去掉之後,原來的程序大小4.23M直接縮小至2.62M。運行良好,看來瘦身很關鍵啊。www.aiwalls.com

      三、原先在ndk-build編譯本地庫時,總是看到有libnative_camera_r2.2.2.so和一個r2.3.3.so生成,如下。奇怪的是,我在本地代碼裡根本沒有使用camera模塊。

 在Application.mk文件裡添加

OPENCV_CAMERA_MODULES:=off 

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *