使用Eclipse构建Android的原生Opencv,给出了“未定义的对`cvCreateFileCapture'的引用”

时间:2012-11-13 00:02:19

标签: java android eclipse opencv java-native-interface

我正在开发一个带有原生部分的应用程序,它使用嵌入式OpenCV从视频文件中提取帧。到目前为止,我收到了这个错误:

.../jni/ocv.c:12: undefined reference to `cvCreateFileCapture'

我的Android.mk:

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE    := ocv
LOCAL_SRC_FILES := ocv.c

include $(BUILD_SHARED_LIBRARY)

Application.mk:

APP_STL := gnustl_static
APP_CPPFLAGS := -frtti -fexceptions
APP_ABI := armeabi

ocv.c:

#include <string.h>
#include <jni.h>
#include <stdio.h>
#include <dlfcn.h>
#include <opencv/cv.h>
#include <opencv/highgui.h>

jstring Java_com_ice_salvador_MainActivity_invokeNativeFunction(JNIEnv* env, jobject javaThis) {
    IplImage* currFrame = 0;
    CvCapture* cap = 0;

    cap = cvCaptureFromFile("/mnt/sdcard/vvv.3gp"); //test video

    return (*env)->NewStringUTF(env, "Hello from native code!");
}

我正在使用OpenCV-2.4.3-android-sdk,Android NDK r8b,Eclipse Juno,Windows。

IplImageCvCapture得到解决,如果我删除cvCaptureFromFile行,代码就会编译 - 所以我假设我的方法是正确的。我是JNI和OpenCV的新手。感谢您的帮助!感谢。

1 个答案:

答案 0 :(得分:1)

不要回答我自己的问题..

1)我已将Android.mk更改为包含SDK中的OpenCV.mk并将.so lib包含在构建中:

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

include c:\dev\OpenCV-2.4.3-android-sdk\sdk\native\jni\OpenCV.mk

LOCAL_MODULE    := ocv
LOCAL_SRC_FILES := ocv.c
LOCAL_LDLIBS += -Lc:\dev\OpenCV-2.4.3-android-sdk\sdk\native\libs\armeabi

include $(BUILD_SHARED_LIBRARY)

#LOCAL_PATH := /home/spatialite/jni
include $(CLEAR_VARS)
LOCAL_MODULE := libopencv_java
LOCAL_SRC_FILES := libopencv_java.so
include $(PREBUILT_SHARED_LIBRARY)

2)将libopencv_java.so复制到jni /文件夹。

3)将java代码更改为:

static {
  System.loadLibrary("opencv_java");
  System.loadLibrary("ocv");
}

错误已经消失。