我正在尝试使用gradle-实验性:0.6.0-Beta5构建一个带有OpenCV 3.0.0的本机应用程序,我的Android版本是v2.1预览1。
Android Studio linking OpenCV static libraries
和
Building native openCV with NDK on android studio
为了声明我将在build.gradle文件中使用的静态库,我已经将第三方库复制到/src/main/jniLibs/armeabi/3 3rdparty/
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仍然无法解决,即使我已经把它放在预构建和依赖块。我该如何解决这个问题?
发布于 2016-03-30 08:00:52
我已经按照@AlexCohn的建议改变了jni.dependencies的顺序,现在它就像一种魅力。因此,我想在这里分享我的链接命令,以供哪些人可能面临一些问题:d
android.sources {
main {
jni {
dependencies {
/*
* OpenCV
*/
library "opencv_flann" linkage "static"
library "opencv_imgproc" linkage "static"
library "opencv_ml" linkage "static"
library "opencv_photo" linkage "static"
library "opencv_video" linkage "static"
library "opencv_imgcodecs" linkage "static"
library "opencv_shape" linkage "static"
library "opencv_videoio" linkage "static"
library "opencv_highgui" linkage "static"
library "opencv_objdetect" linkage "static"
library "opencv_superres" linkage "static"
library "opencv_ts" linkage "static"
library "opencv_features2d" linkage "static"
library "opencv_calib3d" linkage "static"
library "opencv_stitching" linkage "static"
library "opencv_videostab" linkage "static"
library "opencv_core" linkage "static"
library "opencv_hal" linkage "static"
/*
* OpenCV 3rd parties
*/
library "IlmImf" linkage "static"
library "libjpeg" linkage "static"
library "libjasper" linkage "static"
library "libpng" linkage "static"
library "libwebp" linkage "static"
library "libtiff" linkage "static"
library "tbb" linkage "static"
}
}
}
}https://stackoverflow.com/questions/36278082
复制相似问题