Gradle-deneysel kullanarak OpenCV 3.0.0 ile yerel bir uygulama oluşturmaya çalışıyorum: 0.6.0-beta5 ve Android Studio sürümüm v2.1 Önizleme 1. Ben build.gradle dosyasında kullanacağı statik kütüphanelerini ilan etmek
Android Studio linking OpenCV static libraries
ve Building native openCV with NDK on android studio
sağlanan yaklaşımları takip ettim ve zaten 3. taraf kütüphaneleri kopyaladığınız /src/Ana sayfa/jniLibs/armeabi/3.party/:OpenCV4Android bağlantı hatası: 0.6.0-beta5
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
}
Ama ne yazık ki hala hususlar TBB hakkında tanımsız referans hataların bir sürü: Hala bile çözülemeyen libtbb.a ben önceden oluşturulmuş koyup blokları bağımlılıkları var görünüyor
/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'
. Bu sorunu nasıl çözmeliyim?
, 'ldLibs' * * vs' nativeplatform.PrebuiltLibraries' kullanarak hiçbir dezavantajları vardır. Herhangi bir oranda, ** tbb ** listedeki sonuncu olmalı, bu yüzden muhtemelen ** jni.dependencies ** sırasını değiştirerek fark yaratabilir –
Teşekkür ederim @AlexCohn. Bağımlılıkların sırasını yeniden düzenledim ve şimdi çalışıyor! – jxsun