一、OpenCV移植到android之後,開發中遇到錯誤:android fatal signal 11(SIGSEGV) at 0xdeadbaad (code=1).很是糾結,參考https://community.freescale.com/docs/DOC-93378 http://www.linkedin.com/groups/Application-crash-android-40-higher-86481.S.171547732,有的人說是程式中使用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。運行良好,看來瘦身很關鍵啊。
三、原先在ndk-build編譯本地庫時,總是看到有libnative_camera_r2.2.2.so和一個r2.3.3.so產生,如下。奇怪的是,我在本地代碼雷根本沒有使用camera模組。
借鑒這裡http://stackoverflow.com/questions/9460424/opencv-on-android-duplicate-file-for-apk,在Application.mk檔案裡添加
OPENCV_CAMERA_MODULES:=off
果然,再次編譯安裝的時候兩個camera的庫不安裝了!注意這句話寫在Android.mk裡無效。