2

私はいくつかのコードを変更してコンパイルし、結果を取得できるように、opencv C++ コードを使用しています。問題は、JNI インターフェイス関数で opencv c++ の関数を使用できることです。コードの先頭にヘッダーを追加した後、これらの関数を使用できます。コンパイルを実行すると、未定義の参照エラーが発生します。

私はアンドロイドコーディングのためにこれをやっています。

エラーは以下のとおりです(いくつかのエラー):

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;
}
}
4

1 に答える 1

1

あなたのエラーはリンカーエラーです。opencv_core と opencv_highgui に対してリンクするようにリンカーに指示する必要があります。これは、makefile、または makefile を作成するビルド システム (存在する場合) で行うことができます。

于 2015-02-11T12:24:34.007 に答える