我的项目需要调用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交叉编译

解决方案 »

  1.   

    JNI_OnLoad 这个函数没有, 不是error, 只是warning。 不影响程序运行。
    真正的错应该在下面呢, 你没有找到。
      

  2.   

    这个除了自己查看.cpp文件 还有什么方法可以debug 么?
      

  3.   

    你的log不全, 出错的log你没有找到。
    把log贴全了先。
      

  4.   

    我cpp的文件就是我贴上去的这些代码...没有多少,但是我就是找不到哪里有错...
      

  5.   

    log, 不是源代码。
    log贴出来。
      

  6.   

    介个我知道额...亲...你看看我发帖子的下面是虾米...那是赤裸裸的cpp代码丫!!!
      

  7.   

    我不要你的source code, 要log。
    每一个bug, 不一定都是自己的代码出错才有bug的, 出错的原因很多, 很系统环境, 调用的库, 头文件,都有原因。
    没log无法定位哪里出错。
    One more thing, I won't reply ur comments any more, it's wasting my time.
      

  8.   

    "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"
    这个真心不是错误,No JNI_OnLoad found只是个告警,不是NDK的错误,不会对程序造成什么影响的PS:intuition444都解释好多次了,干嘛老让别人帮你看代码呢,找找其他原因啊,如果有错,肯定有其他错误日志啊
      

  9.   

    如果我是刚刚写完这个代码,然后修改,我也不至于这么急...我都看了4、5天了这个编译问题了,上网搜过各种解释...关键是这个不像是eclipse开发android的基础入门程序那样,我可以看android develop中的API库,可以看eoe论坛,可以直接百度出BUG的解决方案...让别人帮我看代码,也不等于我自己就没有努力在看啊,你们也不要一棍子打死别人的努力嘛...我现在确实是不知道哪里有比较系统的资料可以搜索,如何在android下面使用opencv,不是那套android Opencv开发环境配置,或者说解释opencvForandroid中提供的那个hello-jni之类的...
      

  10.   


    真心谢谢陌生人你前面的帮助。
    耽误了您宝贵的时间,不好意思。
    但是我想告诉你,别人问你,不等于别人自己就没努力寻找解决方案。
    只是别人还没有找好很好的搜索解决方案的方法。
    ONE MORE THING, 我相信的沟通是进步的一大阶梯。
      

  11.   

    大家想看到你提供的出错信息,你可以尝试用gdb调试
      

  12.   


    这个我的程序run失败后,LogCat中在我上面的错误Log下面的信息。说实话,我没看懂... 之前程序是一直卡在Log错误的load xxx.so这里。我就直接把虚拟机关掉了。没看过下面的错误信息。
    我态度很认真的...就是他们说的好像我特别懒,所以我就罗里吧嗦的说了些没用的...
      

  13.   

    回复见楼上 
    gdb调试啊?!我去搜搜去...很少用过这个...
      

  14.   


    刚刚查gdb调试命令的时候才想起来,我这里是用的Java代码调用的cpp函数,没有参数传进去,怎么调用哩?gdb也就只能设置些断点之类的 不是嘛?