我的项目需要调用OpenCV函数库,我按照如下的配置开发环境:
Sun JDK 6
Android SDK
Eclipse IDE和ADT plugin for Eclipse
Android NDK
Cygwin
OpenCV 下载的http://sourceforge.net/projects/opencvlibrary/files/opencv-android/2.3.1/ 下预编译好的版本
Windows7
我用cygwin编译出了正常的.so 文件
但是运行的时候,到调用OpenCV代码的时候,出现
Trying to load lib /data/data/包名/lib/libGrabCut.so
Added shared lib /data/data/包名/lib/libGrabCut.so
No JNI_OnLoad found in /data/data/包名/lib/libGrabCut.so
的错误
我在网上查应该是cpp的文件有BUG才到这个问题
跪求大神帮我再查查CPP文件
真心代码不多 我也查过很多遍了...真心不知道哪里错了...#include <jni.h>
#include <stdio.h>
#include <stdlib.h>
#include <opencv2/opencv.hpp>
using namespace cv;#ifndef _Included_com_example_image_util_GrabCut
#define _Included_com_example_image_util_GrabCut
#ifdef __cplusplus
extern "C" {
#endif
JNIEXPORT jintArray JNICALL Java_com_example_image_util_GrabCut_grabCut(JNIEnv* env, jclass obj,jintArray buf,jfloat width,jfloat height);
JNIEXPORT jintArray JNICALL Java_com_example_image_util_GrabCut_grabCut(JNIEnv* env, jclass obj,jintArray buf,jfloat width,jfloat height)
{
jint *cbuf;
cbuf = env->GetIntArrayElements(buf, false); if(cbuf == NULL) {
return 0;
} Mat image(height,width,CV_8UC3,(unsigned char*)cbuf); Mat bgdModel(13*5,1,CV_32FC1,NULL);
Mat fgdModel(13*5,1,CV_32FC1,NULL);
Rect rect = cvRect(0,0,width,height);
Mat mask;
grabCut(image,mask,rect,bgdModel, fgdModel, 1, GC_INIT_WITH_RECT); int size = width * height;
jintArray result = env->NewIntArray(size);
env->SetIntArrayRegion(result, 0, size, cbuf);
env->ReleaseIntArrayElements(buf, cbuf, 0);
return result;
#ifdef __cplusplus
}
#endif
#endif
}
android opencvndk交叉编译
Sun JDK 6
Android SDK
Eclipse IDE和ADT plugin for Eclipse
Android NDK
Cygwin
OpenCV 下载的http://sourceforge.net/projects/opencvlibrary/files/opencv-android/2.3.1/ 下预编译好的版本
Windows7
我用cygwin编译出了正常的.so 文件
但是运行的时候,到调用OpenCV代码的时候,出现
Trying to load lib /data/data/包名/lib/libGrabCut.so
Added shared lib /data/data/包名/lib/libGrabCut.so
No JNI_OnLoad found in /data/data/包名/lib/libGrabCut.so
的错误
我在网上查应该是cpp的文件有BUG才到这个问题
跪求大神帮我再查查CPP文件
真心代码不多 我也查过很多遍了...真心不知道哪里错了...#include <jni.h>
#include <stdio.h>
#include <stdlib.h>
#include <opencv2/opencv.hpp>
using namespace cv;#ifndef _Included_com_example_image_util_GrabCut
#define _Included_com_example_image_util_GrabCut
#ifdef __cplusplus
extern "C" {
#endif
JNIEXPORT jintArray JNICALL Java_com_example_image_util_GrabCut_grabCut(JNIEnv* env, jclass obj,jintArray buf,jfloat width,jfloat height);
JNIEXPORT jintArray JNICALL Java_com_example_image_util_GrabCut_grabCut(JNIEnv* env, jclass obj,jintArray buf,jfloat width,jfloat height)
{
jint *cbuf;
cbuf = env->GetIntArrayElements(buf, false); if(cbuf == NULL) {
return 0;
} Mat image(height,width,CV_8UC3,(unsigned char*)cbuf); Mat bgdModel(13*5,1,CV_32FC1,NULL);
Mat fgdModel(13*5,1,CV_32FC1,NULL);
Rect rect = cvRect(0,0,width,height);
Mat mask;
grabCut(image,mask,rect,bgdModel, fgdModel, 1, GC_INIT_WITH_RECT); int size = width * height;
jintArray result = env->NewIntArray(size);
env->SetIntArrayRegion(result, 0, size, cbuf);
env->ReleaseIntArrayElements(buf, cbuf, 0);
return result;
#ifdef __cplusplus
}
#endif
#endif
}
android opencvndk交叉编译
解决方案 »
- android基站定位,被谷歌坑了,现在有什么好的开放接口
- android系统蓝牙都用什么模块,有单独的android驱动吗?还是需要自己开发?
- 音乐播放器切歌什么的他们是怎么做到监听传感器同时还省电的?
- android密码屏保
- android 应用程序图标上加上数字
- Bitmap对象如何取得其左上角坐标???求解???
- Foursquare for Android 源码。
- android 联系人 contact
- 弱弱的问问,android自适应怎么弄?
- 為一下為何一直上傳谷哥商店失敗
- Dialog 覆盖了 全屏、、、 求指点
- listview的click事件中,如何获取click所指向的item项或索引index
真正的错应该在下面呢, 你没有找到。
把log贴全了先。
log贴出来。
每一个bug, 不一定都是自己的代码出错才有bug的, 出错的原因很多, 很系统环境, 调用的库, 头文件,都有原因。
没log无法定位哪里出错。
One more thing, I won't reply ur comments any more, it's wasting my time.
Added shared lib /data/data/包名/lib/libGrabCut.so
No JNI_OnLoad found in /data/data/包名/lib/libGrabCut.so"
这个真心不是错误,No JNI_OnLoad found只是个告警,不是NDK的错误,不会对程序造成什么影响的PS:intuition444都解释好多次了,干嘛老让别人帮你看代码呢,找找其他原因啊,如果有错,肯定有其他错误日志啊
真心谢谢陌生人你前面的帮助。
耽误了您宝贵的时间,不好意思。
但是我想告诉你,别人问你,不等于别人自己就没努力寻找解决方案。
只是别人还没有找好很好的搜索解决方案的方法。
ONE MORE THING, 我相信的沟通是进步的一大阶梯。
这个我的程序run失败后,LogCat中在我上面的错误Log下面的信息。说实话,我没看懂... 之前程序是一直卡在Log错误的load xxx.so这里。我就直接把虚拟机关掉了。没看过下面的错误信息。
我态度很认真的...就是他们说的好像我特别懒,所以我就罗里吧嗦的说了些没用的...
gdb调试啊?!我去搜搜去...很少用过这个...
刚刚查gdb调试命令的时候才想起来,我这里是用的Java代码调用的cpp函数,没有参数传进去,怎么调用哩?gdb也就只能设置些断点之类的 不是嘛?