2014-11-17 3 views
2

opencv C++ 코드를 사용하여 일부 코드를 변경하고 컴파일하여 결과를 얻을 수 있습니다. 문제는 JNI 인터페이스 함수에서 opencv C++의 함수를 사용할 수 있다는 것입니다. 코드의 맨 위에 헤더를 추가 한 후에 이러한 함수를 사용할 수 있습니다. 컴파일을 실행할 때 정의되지 않은 참조 오류가 발생합니다.OpenCV 정의되지 않은 참조

나는 안드로이드 코딩을하고있다.

오류

는 (몇몇 오류)를 아래에서 언급 :

Volumes/MAC/Farrakh/Software-Setups/android-ndk-r10c/toolchains/arm-linux-androideabi-  
4.6/prebuilt/darwin-x86_64/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-  
androideabi/bin/ld: ./obj/local/armeabi/objs/opencvtest/native.o: in function 
cv::Mat::release():jni/opencv2/core/mat.hpp:366: error: undefined reference to 
'cv::Mat::deallocate()' 

/Volumes/MAC/Farrakh/Software-Setups/android-ndk-r10c/toolchains/arm-linux-androideabi- 
4.6/prebuilt/darwin-x86_64/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux- 
androideabi/bin/ld: ./obj/local/armeabi/objs/opencvtest/native.o: in function 
Java_com_whizpool_opencvtest_MainActivity_imread_11:jni/native.cpp:14: error: undefined reference 
to 'cv::imread(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, 
int)' 

/Volumes/MAC/Farrakh/Software-Setups/android-ndk-r10c/toolchains/arm-linux-androideabi- 
4.6/prebuilt/darwin-x86_64/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux- 
androideabi/bin/ld: ./obj/local/armeabi/objs/opencvtest/native.o: in function 
Java_com_whizpool_opencvtest_MainActivity_imread_11:jni/opencv2/core/mat.hpp:277: error: 
undefined reference to 'cv::fastFree(void*)' 

collect2: ld returned 1 exit status 
make: *** [obj/local/armeabi/libopencvtest.so] Error 1 

내가 너무 많은 일들이 구글에서 가져온하지만 난 어떤 결과를 얻을하지 않았다 시도했다.

다음은 Opencv C++ 코드를 호출하는 데 사용되는 JNI 코드입니다.

#include "com_whizpool_opencvtest_MainActivity.h" 

#include <opencv/cv.h> 
#include <opencv/highgui.h> 

using namespace cv; 

extern "C" 
{ 
JNIEXPORT jlong JNICALL Java_com_whizpool_opencvtest_MainActivity_imread_11(JNIEnv *env, jclass obj, jstring string) 
{ 
    const char *w_buf = env->GetStringUTFChars(string, 0); 

    Mat imgMat = imread("abc", 0); 

    return 0; 
} 
} 

답변

1

오류는 링커 오류입니다. 링커에게 opencv_core 및 opencv_highgui에 링크하도록 지시해야합니다. makefile 또는 makefile을 작성하는 빌드 시스템 (있는 경우)에서이 작업을 수행 할 수 있습니다.