2

作为Android NDK Caffe的新手,我想在我的 Android 项目中使用内置版本。我尝试运行这个构建的示例演示,但在运行时,它显示以下内容:

 03-26 14:46:35.697    2800-3042/com.sh1r0.caffe_android_demo A/libc﹕ Fatal signal 11 (SIGSEGV) at 0x00000000 (code=1), thread 3042 (AsyncTask #1)

(应用程序崩溃)

4

1 回答 1

1

我可以看到 sigsev 信号是通过 android AsyncTask 抛出的。问题可能来自此功能。

caffeMobile.predictImage(strings[0])[0]; //line 160 of MainActivity

此信号来自 JNI,除非您可以本地调试(通过 ndk)应用程序,否则很难知道问题出在哪里。caffe-sample 未配置为在本机方法上进行调试。

试试这个问题来管理错误:

确保此 string[0] 数组中的图像路径不为空。并且存在。

确保其他 caffeMobile 函数能够正常执行,例如:

  caffeMobile = new CaffeMobile();
  caffeMobile.setNumThreads(4);
  caffeMobile.loadModel("/sdcard/caffe_mobile/bvlc_reference_caffenet/deploy.prototxt",    "/sdcard/caffe_mobile/bvlc_reference_caffenet/bvlc_reference_caffenet.caffemodel");

如果您能够执行其他功能,可能您的图像路径不正确,请检查。

如果您无法执行 loadModel 或 setNumThreads 函数,可能是 apk 未正确加载 libjni.so 库,或者 jni 桥无法定位 jni 函数。

于 2016-05-19T14:13:14.090 回答