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ファイルを追加する必要が
問題を特定するためにありがとう、構築しようフレーバーなしで、メインの** ndk **ブロックにOpenCvライブラリをリストアップします。 –
ライブラリをコンパイルするのに成功しましたか?私は同じことが必要であり、その問題で数週間から絶望的です。ありがとう! –
はい、もしあなたがリンクされているプロジェクトを見れば、そこにはJavaとネイティブの両方で使われているライブラリ(他のものもあります)があります。あなたは –