返回介绍

Android(OpenCV) NDK 开发: 0xdeadbaad(code=1) 错误 及 关闭 armeabi 和 libnative_camera_r2.2.2.so 的生成

发布于 2025-02-26 12:46:19 字数 1537 浏览 0 评论 0 收藏 0

一、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 的能力。华为 U9200 cpu 型号是 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 里无效。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文