2014-11-17 3 views
2

Я использую opencv C++-код, чтобы я мог изменить некоторые вещи кода и скомпилировать его и получить результат. Проблема в том, что я могу использовать функции opencv C++ в моей функции интерфейса JNI. Я могу использовать эти функции после добавления заголовка наверху кода. Когда я запускаю компиляцию, я получаю неопределенную ошибку ссылки.OpenCV Undefined reference

Я делаю это для кодирования Android.

Ошибка приведены ниже (несколько ошибок):

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 

Я пытался так много вещей, которые получили от Google, но я не получил никакого результата.

Ниже приведен код JNI, который используется для вызова кода Opencv C++.

#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. Вы можете сделать это в make-файле или в системе сборки, которая создает make-файл для вас (если есть).