2016-05-10 19 views
1

私はAndroidスタジオ2.1とGradleバージョン2.1.0(実験的0.7.0)を使用しています。 問題は、コンパイラがopencvライブラリを見つけることができないことです。このコードでは例えば:アンドロイドプロジェクトでOpenCVライブラリを使用するC++でいくつかのコードを使用しようとしています。AndroidでのOpenCVネイティブ統合

#include <string.h> 
#include <jni.h> 
#include <opencv2/opencv.hpp> 

extern "C" { 

JNIEXPORT void JNICALL 
Java_com_teaminfernale_gazetracker_MainActivity_filterImage(JNIEnv *env, jobject instance, 
                 jlong matAddr) { 

    cv::Mat& src_img = *(cv::Mat*)matAddr; 
    cv::cvtColor(src_img, src_img, CV_BGR2GRAY); 
} 

これはエラーです:

Error:(12) undefined reference to `cv::cvtColor(cv::_InputArray const&, cv::_OutputArray const&, int, int)' 
Error:error: ld returned 1 exit status 
Error:Execution failed for task ':app:linkMain-jniArm64-v8aDebugAllSharedLibrary'. 
A build operation failed. 
Linker failed while linking libmain-jni.so. 

ここに私のGradleファイル:appフォルダ内

built.gradle:

apply plugin: 'com.android.model.application' 
model { 
android { 
    compileSdkVersion = 23 
    buildToolsVersion = "23.0.2" 

    defaultConfig.with { 
     applicationId = "com.teaminfernale.gazetracker" 
     minSdkVersion.apiLevel = 19 
     targetSdkVersion.apiLevel = 23 
     versionCode = 1 
     versionName = "1.0" 
    } 

    buildTypes { 
     release { 
      minifyEnabled = false 
      proguardFiles.add(file('proguard-android.txt')) 
     } 
    } 

    ndk { 
     moduleName = "main-jni" 
     cppFlags.add("-std=c++11") 
     cppFlags.add("-fexceptions") 
     cppFlags.add("-I${file("src/main/jni/include")}".toString()) 
     ldLibs.add("android") 
     ldLibs.add("EGL") 
     ldLibs.add("GLESv2") 
     ldLibs.add("dl") 
     ldLibs.add("log") 
     ldLibs.add("z") 
     stl = "gnustl_shared" 
    } 


} 

android.productFlavors { 

    create("arm") { 
     ndk.with { 
      abiFilters.add("armeabi") 
      File curDir = file('./') 
      curDir = file(curDir.absolutePath) 
      String libsDir = curDir.absolutePath+"\\src\\main\\jniLibs\\armeabi\\" 

      ldFlags.add(libsDir + "libopencv_core.a") 
      ldFlags.add(libsDir + "libIlmImf.a") 
      ldFlags.add(libsDir + "liblibjasper.a") 
      ldFlags.add(libsDir + "liblibjpeg.a") 
      ldFlags.add(libsDir + "liblibpng.a") 
      ldFlags.add(libsDir + "liblibtiff.a") 
      ldFlags.add(libsDir + "liblibwebp.a") 
      ldFlags.add(libsDir + "libtbb.a") 
      ldFlags.add(libsDir + "libopencv_calib3d.a") 
      ldFlags.add(libsDir + "libopencv_features2d.a") 
      ldFlags.add(libsDir + "libopencv_flann.a") 
      ldFlags.add(libsDir + "libopencv_hal.a") 
      ldFlags.add(libsDir + "libopencv_highgui.a") 
      ldFlags.add(libsDir + "libopencv_imgcodecs.a") 
      ldFlags.add(libsDir + "libopencv_imgproc.a") 
      ldFlags.add(libsDir + "libopencv_ml.a") 
      ldFlags.add(libsDir + "libopencv_objdetect.a") 
      ldFlags.add(libsDir + "libopencv_photo.a") 
      ldFlags.add(libsDir + "libopencv_shape.a") 
      ldFlags.add(libsDir + "libopencv_stitching.a") 
      ldFlags.add(libsDir + "libopencv_superres.a") 
      ldFlags.add(libsDir + "libopencv_ts.a") 
      ldFlags.add(libsDir + "libopencv_video.a") 
      ldFlags.add(libsDir + "libopencv_videoio.a") 
      ldFlags.add(libsDir + "libopencv_videostab.a") 
      ldFlags.add(libsDir + "libopencv_java3.so") 

     } 
    } 
    create("arm7") { 
     ndk.with { 
      abiFilters.add("armeabi-v7a") 
      File curDir = file('./') 
      curDir = file(curDir.absolutePath) 
      String libsDir = curDir.absolutePath+"\\src\\main\\jniLibs\\armeabi-v7a\\" 

      ldFlags.add(libsDir + "libopencv_core.a") 
      ldFlags.add(libsDir + "libIlmImf.a") 
      ldFlags.add(libsDir + "liblibjasper.a") 
      ldFlags.add(libsDir + "liblibjpeg.a") 
      ldFlags.add(libsDir + "liblibpng.a") 
      ldFlags.add(libsDir + "liblibtiff.a") 
      ldFlags.add(libsDir + "liblibwebp.a") 
      ldFlags.add(libsDir + "libtbb.a") 
      ldFlags.add(libsDir + "libopencv_calib3d.a") 
      ldFlags.add(libsDir + "libopencv_features2d.a") 
      ldFlags.add(libsDir + "libopencv_flann.a") 
      ldFlags.add(libsDir + "libopencv_hal.a") 
      ldFlags.add(libsDir + "libopencv_highgui.a") 
      ldFlags.add(libsDir + "libopencv_imgcodecs.a") 
      ldFlags.add(libsDir + "libopencv_imgproc.a") 
      ldFlags.add(libsDir + "libopencv_ml.a") 
      ldFlags.add(libsDir + "libopencv_objdetect.a") 
      ldFlags.add(libsDir + "libopencv_photo.a") 
      ldFlags.add(libsDir + "libopencv_shape.a") 
      ldFlags.add(libsDir + "libopencv_stitching.a") 
      ldFlags.add(libsDir + "libopencv_superres.a") 
      ldFlags.add(libsDir + "libopencv_ts.a") 
      ldFlags.add(libsDir + "libopencv_video.a") 
      ldFlags.add(libsDir + "libopencv_videoio.a") 
      ldFlags.add(libsDir + "libopencv_videostab.a") 
      ldFlags.add(libsDir + "libopencv_java3.so") 

     } 
    } 
    create("arm8") { 
     ndk.with { 
      abiFilters.add("arm64-v8a") 
      File curDir = file('./') 
      curDir = file(curDir.absolutePath) 
      String libsDir = curDir.absolutePath+"\\src\\main\\jniLibs\\arm64-v8a\\" 

      ldFlags.add(libsDir + "libopencv_core.a") 
      ldFlags.add(libsDir + "libIlmImf.a") 
      ldFlags.add(libsDir + "liblibjasper.a") 
      ldFlags.add(libsDir + "liblibjpeg.a") 
      ldFlags.add(libsDir + "liblibpng.a") 
      ldFlags.add(libsDir + "liblibtiff.a") 
      ldFlags.add(libsDir + "liblibwebp.a") 
      ldFlags.add(libsDir + "libtbb.a") 
      ldFlags.add(libsDir + "libopencv_calib3d.a") 
      ldFlags.add(libsDir + "libopencv_features2d.a") 
      ldFlags.add(libsDir + "libopencv_flann.a") 
      ldFlags.add(libsDir + "libopencv_hal.a") 
      ldFlags.add(libsDir + "libopencv_highgui.a") 
      ldFlags.add(libsDir + "libopencv_imgcodecs.a") 
      ldFlags.add(libsDir + "libopencv_imgproc.a") 
      ldFlags.add(libsDir + "libopencv_ml.a") 
      ldFlags.add(libsDir + "libopencv_objdetect.a") 
      ldFlags.add(libsDir + "libopencv_photo.a") 
      ldFlags.add(libsDir + "libopencv_shape.a") 
      ldFlags.add(libsDir + "libopencv_stitching.a") 
      ldFlags.add(libsDir + "libopencv_superres.a") 
      ldFlags.add(libsDir + "libopencv_ts.a") 
      ldFlags.add(libsDir + "libopencv_video.a") 
      ldFlags.add(libsDir + "libopencv_videoio.a") 
      ldFlags.add(libsDir + "libopencv_videostab.a") 
      ldFlags.add(libsDir + "libopencv_java3.so") 

     } 
    } 

    create("x86") { 
     ndk.with { 
      abiFilters.add("x86") 
      File curDir = file('./') 
      curDir = file(curDir.absolutePath) 
      String libsDir = curDir.absolutePath+"\\src\\main\\jniLibs\\x86\\" 

      ldFlags.add(libsDir + "libopencv_core.a") 
      ldFlags.add(libsDir + "libIlmImf.a") 
      ldFlags.add(libsDir + "liblibjasper.a") 
      ldFlags.add(libsDir + "liblibjpeg.a") 
      ldFlags.add(libsDir + "liblibpng.a") 
      ldFlags.add(libsDir + "liblibtiff.a") 
      ldFlags.add(libsDir + "liblibwebp.a") 
      ldFlags.add(libsDir + "libtbb.a") 
      ldFlags.add(libsDir + "libopencv_calib3d.a") 
      ldFlags.add(libsDir + "libopencv_features2d.a") 
      ldFlags.add(libsDir + "libopencv_flann.a") 
      ldFlags.add(libsDir + "libopencv_hal.a") 
      ldFlags.add(libsDir + "libopencv_highgui.a") 
      ldFlags.add(libsDir + "libopencv_imgcodecs.a") 
      ldFlags.add(libsDir + "libopencv_imgproc.a") 
      ldFlags.add(libsDir + "libopencv_ml.a") 
      ldFlags.add(libsDir + "libopencv_objdetect.a") 
      ldFlags.add(libsDir + "libopencv_photo.a") 
      ldFlags.add(libsDir + "libopencv_shape.a") 
      ldFlags.add(libsDir + "libopencv_stitching.a") 
      ldFlags.add(libsDir + "libopencv_superres.a") 
      ldFlags.add(libsDir + "libopencv_ts.a") 
      ldFlags.add(libsDir + "libopencv_video.a") 
      ldFlags.add(libsDir + "libopencv_videoio.a") 
      ldFlags.add(libsDir + "libopencv_videostab.a") 
      ldFlags.add(libsDir + "libopencv_java3.so") 

     } 
    } 
    create("x86-64") { 
     ndk.with { 
      abiFilters.add("x86_64") 
      File curDir = file('./') 
      curDir = file(curDir.absolutePath) 
      String libsDir = curDir.absolutePath+"\\src\\main\\jniLibs\\x86_64\\" 

      ldFlags.add(libsDir + "libopencv_core.a") 
      ldFlags.add(libsDir + "libIlmImf.a") 
      ldFlags.add(libsDir + "liblibjasper.a") 
      ldFlags.add(libsDir + "liblibjpeg.a") 
      ldFlags.add(libsDir + "liblibpng.a") 
      ldFlags.add(libsDir + "liblibtiff.a") 
      ldFlags.add(libsDir + "liblibwebp.a") 
      ldFlags.add(libsDir + "libtbb.a") 
      ldFlags.add(libsDir + "libopencv_calib3d.a") 
      ldFlags.add(libsDir + "libopencv_features2d.a") 
      ldFlags.add(libsDir + "libopencv_flann.a") 
      ldFlags.add(libsDir + "libopencv_hal.a") 
      ldFlags.add(libsDir + "libopencv_highgui.a") 
      ldFlags.add(libsDir + "libopencv_imgcodecs.a") 
      ldFlags.add(libsDir + "libopencv_imgproc.a") 
      ldFlags.add(libsDir + "libopencv_ml.a") 
      ldFlags.add(libsDir + "libopencv_objdetect.a") 
      ldFlags.add(libsDir + "libopencv_photo.a") 
      ldFlags.add(libsDir + "libopencv_shape.a") 
      ldFlags.add(libsDir + "libopencv_stitching.a") 
      ldFlags.add(libsDir + "libopencv_superres.a") 
      ldFlags.add(libsDir + "libopencv_ts.a") 
      ldFlags.add(libsDir + "libopencv_video.a") 
      ldFlags.add(libsDir + "libopencv_videoio.a") 
      ldFlags.add(libsDir + "libopencv_videostab.a") 
      ldFlags.add(libsDir + "libopencv_java3.so") 

     } 
    } 

    create("mips") { 
     ndk.with { 
      abiFilters.add("mips") 
      File curDir = file('./') 
      curDir = file(curDir.absolutePath) 
      String libsDir = curDir.absolutePath+"\\src\\main\\jniLibs\\mips\\" 

      ldFlags.add(libsDir + "libopencv_core.a") 
      ldFlags.add(libsDir + "libIlmImf.a") 
      ldFlags.add(libsDir + "liblibjasper.a") 
      ldFlags.add(libsDir + "liblibjpeg.a") 
      ldFlags.add(libsDir + "liblibpng.a") 
      ldFlags.add(libsDir + "liblibtiff.a") 
      ldFlags.add(libsDir + "liblibwebp.a") 
      ldFlags.add(libsDir + "libtbb.a") 
      ldFlags.add(libsDir + "libopencv_calib3d.a") 
      ldFlags.add(libsDir + "libopencv_features2d.a") 
      ldFlags.add(libsDir + "libopencv_flann.a") 
      ldFlags.add(libsDir + "libopencv_hal.a") 
      ldFlags.add(libsDir + "libopencv_highgui.a") 
      ldFlags.add(libsDir + "libopencv_imgcodecs.a") 
      ldFlags.add(libsDir + "libopencv_imgproc.a") 
      ldFlags.add(libsDir + "libopencv_ml.a") 
      ldFlags.add(libsDir + "libopencv_objdetect.a") 
      ldFlags.add(libsDir + "libopencv_photo.a") 
      ldFlags.add(libsDir + "libopencv_shape.a") 
      ldFlags.add(libsDir + "libopencv_stitching.a") 
      ldFlags.add(libsDir + "libopencv_superres.a") 
      ldFlags.add(libsDir + "libopencv_ts.a") 
      ldFlags.add(libsDir + "libopencv_video.a") 
      ldFlags.add(libsDir + "libopencv_videoio.a") 
      ldFlags.add(libsDir + "libopencv_videostab.a") 
      ldFlags.add(libsDir + "libopencv_java3.so") 

     } 
    } 
    create("mips-64") { 
     ndk.with { 
      abiFilters.add("mips64") 
      File curDir = file('./') 
      curDir = file(curDir.absolutePath) 
      String libsDir = curDir.absolutePath+"\\src\\main\\jniLibs\\mips64\\" 

      ldFlags.add(libsDir + "libopencv_core.a") 
      ldFlags.add(libsDir + "libIlmImf.a") 
      ldFlags.add(libsDir + "liblibjasper.a") 
      ldFlags.add(libsDir + "liblibjpeg.a") 
      ldFlags.add(libsDir + "liblibpng.a") 
      ldFlags.add(libsDir + "liblibtiff.a") 
      ldFlags.add(libsDir + "liblibwebp.a") 
      ldFlags.add(libsDir + "libtbb.a") 
      ldFlags.add(libsDir + "libopencv_calib3d.a") 
      ldFlags.add(libsDir + "libopencv_features2d.a") 
      ldFlags.add(libsDir + "libopencv_flann.a") 
      ldFlags.add(libsDir + "libopencv_hal.a") 
      ldFlags.add(libsDir + "libopencv_highgui.a") 
      ldFlags.add(libsDir + "libopencv_imgcodecs.a") 
      ldFlags.add(libsDir + "libopencv_imgproc.a") 
      ldFlags.add(libsDir + "libopencv_ml.a") 
      ldFlags.add(libsDir + "libopencv_objdetect.a") 
      ldFlags.add(libsDir + "libopencv_photo.a") 
      ldFlags.add(libsDir + "libopencv_shape.a") 
      ldFlags.add(libsDir + "libopencv_stitching.a") 
      ldFlags.add(libsDir + "libopencv_superres.a") 
      ldFlags.add(libsDir + "libopencv_ts.a") 
      ldFlags.add(libsDir + "libopencv_video.a") 
      ldFlags.add(libsDir + "libopencv_videoio.a") 
      ldFlags.add(libsDir + "libopencv_videostab.a") 
      ldFlags.add(libsDir + "libopencv_java3.so") 

     } 
    } 
    create("all") 
} 
} 

dependencies { 
compile fileTree(include: ['*.jar'], dir: 'libs') 
testCompile 'junit:junit:4.12' 
compile 'com.android.support:appcompat-v7:23.3.0' 
compile project(':opencv') 
} 

を構築します。 opencvフォルダのgradle:

メインプロジェクトフォルダ内

built.gradle:

buildscript { 
repositories { 
    jcenter() 
} 
dependencies { 
    classpath 'com.android.tools.build:gradle-experimental:0.7.0' 
} 
} 

allprojects { 
repositories { 
    jcenter() 
} 
} 

task clean(type: Delete) { 
delete rootProject.buildDir 
} 

settings.gradle:ここ

include ':app' 
include ':opencv' 

明確にすることができた場合、完全なプロジェクト:私の無能のためhttps://github.com/eug93/GazeTracker

申し訳ありませんが、実現可能な解決策を見つけることができませんでした。 build.gradleであなたはJNIフォルダに

をandroid.mkファイルを追加する必要が

+0

問題を特定するためにありがとう、構築しようフレーバーなしで、メインの** ndk **ブロックにOpenCvライブラリをリストアップします。 –

+0

ライブラリをコンパイルするのに成功しましたか?私は同じことが必要であり、その問題で数週間から絶望的です。ありがとう! –

+0

はい、もしあなたがリンクされているプロジェクトを見れば、そこにはJavaとネイティブの両方で使われているライブラリ(他のものもあります)があります。あなたは –

答えて

-1

と、次の行

sourceSets.main {

jni.srcDirs = [] //disable automatic ndk-build call 
    jniLibs.srcDir 'src/main/jniLibs' 
} 

buildTypes { 
.. 
    } 
関連する問題