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

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

一、OpenCV移植到android之後,開發中遇到錯誤:android fatal signal 11(SIGSEGV) at 0xdeadbaad (code=1).很是糾結,參考https://community.freescale.com/docs/DOC-93378http://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模組。

<code style="border: 0px; padding: 0px; margin: 0px; font-family: Consolas, Menlo, Monaco, 'Lucida Console', 'Liberation Mono', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Courier New', monospace, serif; vertical-align: baseline;"><span class="pln" style="border: 0px; padding: 0px; background-color: transparent; margin: 0px; vertical-align: baseline;">OPENCV_CAMERA_MODULES</span><span class="pun" style="border: 0px; padding: 0px; background-color: transparent; margin: 0px; vertical-align: baseline;">:=</span><span class="pln" style="border: 0px; padding: 0px; background-color: transparent; margin: 0px; vertical-align: baseline;">off </span></code>

果然,再次編譯安裝的時候兩個camera的庫不安裝了!注意這句話寫在Android.mk裡無效。