OpenCV 3.0.0でネイティブアプリケーションを作成しようとしています:gradle-experimental:0.6.0-beta5、Android Studioバージョンはv2.1プレビュー1.私はbuild.gradleファイルで使用する静的ライブラリを宣言する
Android Studio linking OpenCV static libraries
と Building native openCV with NDK on android studio
で提供アプローチを踏襲している、と私はすでににサードパーティのライブラリをコピーした/SRC /メイン/ jniLibs/Armeabi/3rdparty/:Gradle-ExperimentalでOpenCV4Androidリンクエラーが発生しました:
def openCVAndroidLibDir = file(project(':app').projectDir).absolutePath + "/src/main/jniLibs"
def openCVAndroidSdkDir = "/home/jxsun/OpenCV-android-sdk/sdk/native/jni/include/opencv2"
model {
repositories {
prebuilt(org.gradle.nativeplatform.PrebuiltLibraries) {
libtiff {
binaries.withType(StaticLibraryBinary) {
staticLibraryFile = file("${openCVAndroidLibDir}/${targetPlatform.getName()}/3rdparty/liblibtiff.a")
}
}
...
tbb {
binaries.withType(StaticLibraryBinary) {
staticLibraryFile = file("${openCVAndroidLibDir}/${targetPlatform.getName()}/3rdparty/libtbb.a")
}
}
opencv_hal {
headers.srcDir "${openCVAndroidSdkDir}"
binaries.withType(StaticLibraryBinary) {
staticLibraryFile = file("${openCVAndroidLibDir}/${targetPlatform.getName()}/libopencv_hal.a")
}
}
opencv_core {
headers.srcDir "${openCVAndroidSdkDir}"
binaries.withType(StaticLibraryBinary) {
staticLibraryFile = file("${openCVAndroidLibDir}/${targetPlatform.getName()}/libopencv_core.a")
}
}
...
opencv_videostab {
headers.srcDir "${openCVAndroidSdkDir}"
binaries.withType(StaticLibraryBinary) {
staticLibraryFile = file("${openCVAndroidLibDir}/${targetPlatform.getName()}/libopencv_videostab.a")
}
}
}
}
android.sources {
main {
jni {
dependencies {
library "IlmImf" linkage "static"
...
library "tbb" linkage "static"
library "opencv_core" linkage "static"
...
library "opencv_videostab" linkage "static"
library "opencv_hal" linkage "static"
}
}
}
}
android.ndk {
moduleName = "test"
cppFlags.add("-std=c++11")
cppFlags.add("-fexceptions")
cppFlags.add("-frtti")
cppFlags.add("-I${file("/home/jxsun/OpenCV-android-sdk/sdk/native/jni/include")}".toString())
cppFlags.add("-I${file("/home/jxsun/OpenCV-android-sdk/sdk/native/jni/include/opencv")}".toString())
cppFlags.add("-I${file("/home/jxsun/OpenCV-android-sdk/sdk/native/jni/include/opencv2")}".toString())
abiFilters.add("armeabi")
ldLibs.addAll(["android", "EGL", "GLESv2", "dl", "log", "z"])
stl = "gnustl_shared"
platformVersion = 21
}
しかし残念ながら、私はまだTBBについて未定義の参照エラーの多くを得る:
/home/jxsun/StudioProjects/Test/app/src/main/jniLibs/armeabi/libopencv_core.a(parallel.cpp.o):parallel.cpp:function tbb::interface6::internal::start_for<tbb::blocked_range<int>, (anonymous namespace)::ProxyLoopBody, tbb::auto_partitioner const>::~start_for(): error: undefined reference to 'vtable for tbb::task'
libtbb.aはまだ私が事前に作成し、依存関係のブロックに入れても解決できないようです。 この問題をどのように解決すればよいですか?
、 'ldLibs' * * VS' nativeplatform.PrebuiltLibraries'を使用して何の欠点はありません。いずれにせよ、** tbb **はリストの最後になければならないので、おそらく** jni.dependencies **の順番を変更すると違いが生まれます –
ありがとう@AlexCohn。私は依存関係の順序を並べ替え、今すぐ動作します! – jxsun